想提升JavaScript技能,你得掌握這5大關鍵概念

2020-12-14 讀芯術

全文共3576字,預計學習時長9分鐘

圖源:unsplash

學習一種語言或框架的核心概念,從而高效編寫代碼,這是個不錯的想法。然而,如果你想快速學習新東西,必然需要閱讀冗長的說明,這會很麻煩。因此,本文將簡單地解釋一些核心概念幫助你更輕鬆地去理解它們。

這些概念將改變你的編碼方式,助你寫出高質代碼,成為高效的開發人員。基於在編碼領域的受歡迎度,筆者挑選出了下面這些概念。一起開始吧!

1.解構

從對象中提取屬性有幾種方法,解構就是其中之一。它有助於清晰地提取對象的屬性、從數組中賦值或將對象的屬性賦給變量。之所以優於其他方法,是因為它允許在單個語句中提取多個屬性,可以從嵌套對象中訪問屬性,還可以在屬性不存在時為其賦默認值。

比如以下對象。

const profile = {

name: "Harry",

age: 15,

country: "UK"

};

運用解構,可以在單個語句中提取此對象的一個或多個屬性。

const { name, age } = profile; console.log(name, age);

// Harry 15

給屬性賦值是解構的另一種用法,不存在的屬性將返回指定默認值。

const { name, age, school = "Hogwarts" } =profile;console.log(school);

// Hogwarts

此外,數組解構也很流行,可以為變量分配默認值,在變量之間交換值等。在引入ES6之前,還不存在可以一次提取所有數據的機制。因此,解構是一個工具概念,可以讓代碼更純淨。

2.Spread語法

將spread運算符用於可迭代對象(如數組和字符串),它有助於將可迭代對象擴展為單個元素。擴展運算符的語法為三個點( ... )。

例如,假設一個函數需要三個參數,而我們有一個包含三個元素的數組。通過使用spread語法,可以將數組傳遞給這個函數,它將迭代數組,並將元素分配給函數的相關參數。

function sum (a, b, c) {

return a + b + c;

}const numbers = [1, 2, 3];console.log(sum(...numbers));

// 6

在ES6中引入spread運算符之前,使用數組將參數傳遞給函數要複雜得多。

spread語法的另一種用法是連接數組。假設有兩個數組,如下所示:

const vegetables = ["carrot", "pumpkin"];

const fruits = ["apple", "pear"];

在引入spread語法前,必須使用array.concat方法來組合這些數組。然而,使用spread語法,數組組合變得非常容易。

const newArray = [ ...vegetables, ...fruits ];console.log(newArray);

// ["carrot", "pumpkin", "apple","pear"]

此外,還可以使用spread運算符創建具有完全相同內容但引用不同的對象副本。

圖源:unsplash

3. Rest語法

rest語法使用規範與spread語法相同。區別在於,spread會複製所有內容,而如果想要檢索所有剩餘元素時,就可以使用rest語法。

const numbers = [1, 3, 2, 6, 8];const [1, 3, ...rest] =numbers;console.log(rest);

// [2, 6, 8]

4.數組方法

JavaScript數組方法為數組中的數據轉換提供了一種乾淨簡潔的解決方案。在眾多可用的數組方法中,我將介紹4種最重要的方法,即map, filter, reduce 和 some。

· Map

此方法返回一個數組,其中數組中的每個元素都根據指定函數進行轉換。比如,如果要將數組的每個元素乘以2,就可以使用map方法,在單個語句中完成這項工作,而不需要任何複雜循環。此外,map方法不會改變原始數據。

const array = [1, 2, 3];

const mapped = array.map(element => element * 2);console.log(mapped);

// [2, 4, 6]

· Filter

此方法返回一個元素數組,其中函數返回true。比如,如果需要從數組中檢索偶數,則可以按如下方式篩選數組。

const numbers = [1, 2, 3, 4, 5, 6];

const evenNumbers = numbers.filter(element => element % 2 ===0);console.log(evenNumbers);

// [2, 4, 6]

· Reduce

此方法根據函數指定的值進行累積。

const arr = [1, 2, 3, 4, 5, 6];

const reduced = arr.reduce((total, current) => total +current);console.log(reduced);

// 21

這三種方法是數組中功能強大的數據轉換方法,可以得到非常清晰易讀的代碼。使用這些方法可以編寫更簡單、更短的代碼,而不必擔心循環或分支。這些數組方法對於JavaScript開發人員來說非常重要,它可以減少代碼、減少人工操作並提高可讀性。

· Some

如果數組中的某些元素通過了指定函數的測試,則此方法返回true。如果沒有元素與該函數相對應,則此方法返回false:

const array = [1, 2, 3, 4, 5];const isEven = (element) => element % 2=== 0;console.log(array.some(isEven));

// true

與在數組中迭代查找結果的傳統方法相反,該方法在查找符合特定條件數組中的元素時非常有用。

圖源:unsplash

5. 值與引用變量分配

如何給變量賦值是每個JavaScript開發人員都應該知道的一個最重要的概念。如果不知道這一點,就可能會給變量賦值並無意中更改掉了,這將導致代碼中出現意外錯誤。

JavaScript總是按變量的值分配變量。但是主要有兩種賦值類型:如果賦值是JavaScript基元類型(boolean、null、undefined、string、number、bigint和symbol),則實際值被賦給變量。但如果分配的值是Array, Function,或Object,則分配的是內存中對象的引用,而不是實際值。

一起來看下面幾個例子,加深理解。考慮變量name1和name2:

let name1 = "John";

let name2 = name1;

變量name2被分配為變量name1,因此,這些變量屬於基元類型,所以實際值(「John」)被分配給這兩個變量。因此,這兩個變量可以看作是兩個值相同的獨立變量。由於這個原因,重新分配第二個變量不會影響第一個變量。這稱為按值分配變量。

name2 = "Peter";console.log(name1, name2);

// "John", "Peter"

另一種方法是通過引用分配變量。如果變量類型是array, object,或 function,則在內存中為變量分配一個引用,而不是實際值。來看看以下對象賦值。

let obj1 = { name: "Lucy" }

let obj2 = obj1;

通過該賦值,變量obj2獲得與obj1相同的內存引用。因此,改變obj2 也會影響obj1,因為它們不再被視為單獨的變量。這兩個變量在內存中有相同的引用。

obj2.name = "Mary";console.log(obj1);

// { name: "Mary" }console.log(obj2);

// { name: "Mary" }

如果需要在內存中創建具有不同引用的相同對象的副本,可以使用spread運算符。以這種方式改變新創建的對象不會影響第一個對象,因為它們在內存中有不同的引用。

let object1 = { name: "Lucy" };

let object3 = {...object1}object3.name = "Anne";console.log(object1);

// { name: "Lucy" }console.log(object3);

// { name: "Anne" }

掌握這些概念將助你編寫更好、更簡潔的代碼。以上講到的這些核心概念,你了解了嘛?

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • javascript中那些奇怪的特性
    JavaScript 通常被認為是最容易掌握的語言,也是最難掌握的語言。 我完全贊同。 這是因為 JavaScript 是一種非常古老且非常靈活的語言。 它充滿了神秘的語法和過時的功能。 我已經使用 JavaScript 多年了,迄今為止,我仍時不時地發現一些我從未知道的隱藏語法或技巧。比如下圖,讓很多前端程式設計師感到很無奈。
  • 火影,要想掌握超高技能,得先有個特殊體質,才能發揮出強悍威力
    火影世界裡高手如雲,每個人身上都掌握獨特技能所在,為了修煉出更高技能,用盡一切辦法,將身體進行改造,或者靠神器輔助等等,但是在劇中還有種途徑也能幫助人得到更高實力,那就要先得到一種罕見體質,可以在戰爭中起到關鍵作用,還能保護持有者不被攻擊,總之要想獲得超高技能,首先要有個特殊體質,才會發揮出強大威力
  • 瞬息萬變的未來,你必須要掌握的5種技能
    真正的問題是:你能做些什麼來讓自己在快速變化的職場中變得不可或缺?不可或缺的意思是你工作出色,效率高,老闆不會讓你離開。這意味著你具備了幾乎每個僱主都在他們的僱員身上尋找的技能。好消息是:你仍然可以重塑自我,提高技能或學習新的技能來使自己獲得職業上的成功。
  • 這一次,徹底弄懂 JavaScript 執行機制
    不論你是javascript新手還是老鳥,不論是面試求職,還是日常開發工作,我們經常會遇到這樣的情況:給定的幾行代碼,我們需要知道其輸出內容和順序。我們真的要徹底弄明白javascript的執行機制了。1.關於javascriptjavascript是一門單線程語言,在最新的HTML5中提出了Web-Worker,但javascript是單線程這一核心仍未改變。
  • 新晉管理者如何快速提升職業關鍵技能?
    實際上,並不是你的能力不行,而是你沒有找到管理技巧。第47屆MPD技術管理者工作坊北京站(9月18-19日),邀請到了25位一線國內外技術大咖圍繞產品、團隊、架構、AI、測試/運維五個方向,幫助技術管理者刷新職業關鍵技能和學習路徑,為他們提供新技術、新思維、新實踐。
  • 什麼是JavaScript對象?如何創建並引用?這就告訴你!
    最後一個鍵值對末尾不用加逗號var obj = {key1:value1,key2:value2};2.2 對象的構成對象是JavaScript的核心概念,也是最重要的數據類型。JavaScript的所有數據都可以被視為對象。
  • 想要成為設計專家,先掌握這5個提升審美的視覺方法
    好的設計往往能夠根據產品的性格和特徵來量身打造,而做到這一點卻很難,文章為大家分享了5個關於提升視覺設計的方法,希望能對你有所幫助。而資深設計師,隨便調調,往往都能調出很好看、很高級的視覺風格,這主要由於他們手裡掌握著各類紮實的方法,對」 美 「的套路有深刻的理解。
  • 前端:用javascript實現一個轉盤小遊戲?
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫本文主要介紹如何使用原生javascript和Css3來實現一個在各大移動應用中經常出現的轉盤遊戲,由於改實現可以有不同方式,如果熟悉canvas的話也可以用canvas實現,本文採用js和css實現主要考慮到複雜度較小性能較好
  • Javascript 生成器
    Javascript 的生成器語法類似於 PHP,但是區別也很大,如果你希望它們的作用相同,那麼最終你會感到非常困惑。 生成器函數 首先,代碼中存在生成器函數的定義: 後面的 告訴 javascript 這是一個生成器函數。以下寫法都是生成器函數的有效定義。 並不是函數名的一部分。而是 符號定義了生成器。
  • javascript這些特點你知道其中幾個?建議前端小白好好看看!
    JavaScript是一門屬於客戶端的腳本語言,你可以簡單理解為基於網站和網頁的程序語言(雖然這樣解釋不太嚴謹)。它是web開發中常用的腳本語言,特別是前端。 JavaScript主要功能是增強網頁互動性能,從而增加網站的用戶粘性。
  • 決戰平安京:玩大司命你必須要掌握的一些技巧,你都具備嗎?
    決戰平安京:玩大司命你必須要掌握的一些技巧,你都具備嗎?說起決戰平安京這款moba手遊,沒玩過的人會感覺裡面的式神名字和出裝都會有點晦澀難懂,同時也對這裡面式神的建模風格會感到一絲不適,但若是你是一位陰陽師玩家你就不會這麼覺得了,所以大家在玩決戰平安京之前,不妨先試著玩玩陰陽師一段時間,當然你也可以兩款遊戲一起玩,這樣就能更快地掌握和適應這種日系風格的遊戲。
  • DNF紅眼打樁必備技巧,寵物和技能順序是關鍵,你的傷害還能提升
    不過對於很多紅眼玩家來說,現階段大都已經達成畢業,打樁測試傷害是重點,但不同玩家間的打樁結果總會有很大差距,這究竟是什麼原因導致的?下面阿趣就來談談紅眼的打樁必備技巧,掌握了這些,你的傷害還可以再提升。
  • 【門派攻略】點蒼技能連招詳解,合理掌握進退時機是戰鬥的關鍵!
    其技能神鬼如泣、風雨流雲、筆走龍蛇、妙筆生花都是極強的輸出技能。 偷換日月使用後15秒內所有攻擊技能冷卻時間減少30%,雪落筆法、偷換日月都是提升後續戰鬥能力的技能。所以我們戰鬥開始一定是用偷換日月和雪落筆法作為先手。
  • 要緊的是你能否掌握一項技能
    所以其實那些特點是給你的一些提醒訊號而已,因為有些人的性格是可以進行改變的,或者被引導而改變的。這個概念就是我們今天要說的主題「感情自律法則」,這是一項非常重要又實用的技能。而我卻認為,他們兩個能步入婚姻殿堂,這是不可能的事。彼時年少,我想的沒有那麼深,也沒有那麼多,當時只是有一種不好的感覺。雖然後來想通了,但也遲了,這位朋友到現在都是孤單的活著,因為她已經沒有什麼去愛的意識了(她已經無法懷孕了)。
  • 學完熟練掌握一套Axure原型技能!
    我們又應該如何提升交互和產品思維能力呢?為了解決這些問題,起點學院為大家打造了為期6周的《Axure原型實戰訓練營》課程,學完這門課程,你將能更快速熟練地掌握Axure工具,提高工作效率,還將掌握原型規範化能力,同時提升交互和產品思維。接下來,讓我們看看為什麼學習這門課程,就能做出規範原型圖?且提升交互和產品思維?
  • 明日之後大遷徙:熟練度如何快速提升,這幾個技巧你得掌握
    明日之後大遷徙在這個殘酷的生活環境之中,天賦熟練度可謂十分有用,在明日之後大遷徙遊戲中,熟練度的提升可以加點,可以提升各種收益。所謂笨鳥先飛,很多玩家都想知道,如何快人一步的提升自己的熟練度呢?今天小編就來給大家分享下一,一起來看看吧!
  • 方法是關鍵!
    方法是關鍵!一、巧用課本、打好基礎是關鍵有同學會發現自己的成績,怎麼做都提高不了了,這是因為學科基礎打得不夠牢固。因為每個綜合題都是由很多的小問題組成,每個小問題都涉及一個方面,如果想考更高的,就得打牢基礎。
  • JavaScript是2020年最需要的IT技能
    根據開發人員技能測試人員DevSkiller的一份報告,JavaScript是2020年IT領域最需要的技能。這份報告,「頂級IT技能報告2020:需求和僱傭動向」,具有JavaScript的切換與地方的Java時相比,去年的報告,今年與Java在第三位,落後SQL。
  • 鋼琴彈得好不好,關鍵在這
    同時,對基本練習的熟練程度也決定了我們對鋼琴鍵盤的熟練程度,對鍵盤越熟練,在視奏新譜的時候,就省去了來回看譜看鍵盤的這個過程,從而提升了視譜能力。音樂一共有二十四個大小調,每種調性都代表了不同的情感色彩,對這些調性的敏感度有助於對作品情感的判斷,從而提升對音樂的理解和演奏時的音樂表現力。
  • 《無限可能》:掌握這3種記憶方法,你就擁有了最強大腦的技能包
    它像運動技能一樣,可以通過訓練提高。」本書作者吉姆奎克是一名大腦教練,是記憶力提升、腦力優化、快速學習方法方面公認的世界級專家。但是你知道嗎?其實他曾經是一名腦損傷兒童!從「重度腦損傷」到「大腦教練」,從最怕學習、最怕公開演講的毫無存在感的小孩,成長為大部分時間都用來演講、演講主題就是學習的教練。