譯文:每個(gè)開(kāi)發(fā)人員都應(yīng)該知道的31個(gè)js概念

我是法醫(yī),一只治療系前端碼猿??,與代碼對(duì)話(huà),傾聽(tīng)它們心底的呼聲,期待著大家的點(diǎn)贊??與關(guān)注?,當(dāng)然也歡迎加入前端獵手技術(shù)交流群??,文末掃碼我拉你進(jìn)群,一起交流技術(shù)以及代碼之外的一切???♀?
轉(zhuǎn)載自Duing(ID:duyi-duing)
原文鏈接:https://dev.to/eludadev/33-javascript-concepts-every-beginner-should-know-with-tutorials-4kao
作者:Eluda
如有翻譯不準(zhǔn),請(qǐng)多指正
關(guān)于js你真正了解多少呢?你可能知道如何去寫(xiě)函數(shù),理解簡(jiǎn)單的算法,甚至可能會(huì)編寫(xiě)類(lèi)。但是你知道什么是類(lèi)型化數(shù)組嗎?
你不需要立刻知道這些概念的全部,但是,你最終會(huì)在你今后的事業(yè)中需要到它們。這就是我為什么建議將這些寫(xiě)成一個(gè)列表,因?yàn)橛泻艽罂赡埽銜?huì)遇到它們其中的一個(gè)主題,并且會(huì)想要一個(gè)教程為了完全的理解它們。
1:調(diào)用棧

調(diào)用棧是解釋器(像web瀏覽器中js解釋器),是用來(lái)保持對(duì)它在調(diào)動(dòng)各個(gè)函數(shù)腳本位置的跟蹤——當(dāng)前正在運(yùn)行的函數(shù)是什么以及這些函數(shù)中調(diào)動(dòng)了什么函數(shù),等等。
2:原始類(lèi)型

除了對(duì)象外,所有的類(lèi)型都定義了不可更改的變值(即不可更改的值)。例如(與C不同的),字符串就是不可變的。我們將這些類(lèi)型的變值成為“原始值”。
3:值類(lèi)型以及引用類(lèi)型

分配了非本原始值的變量會(huì)被該值所引用。該引用指向?qū)ο笤趦?nèi)存當(dāng)中的位置。實(shí)際上,這些變量不包含這個(gè)值。
4:隱式,顯式,標(biāo)稱(chēng),結(jié)構(gòu)化以及鴨子類(lèi)型

類(lèi)型強(qiáng)制意味著當(dāng)運(yùn)算符的操作數(shù)是不同的類(lèi)型時(shí),它們其中的一個(gè)就會(huì)被轉(zhuǎn)換成另一個(gè)操作數(shù)類(lèi)型的“等價(jià)值”。
5:==與===與typeof

JavaScript有兩種視覺(jué)上相似但又非常不同的方法來(lái)測(cè)試相等性。你可以用==或者===來(lái)測(cè)試。
6:函數(shù)作用域,塊作用域和詞法作用域

區(qū)分差別是非常重要的,因?yàn)楸磉_(dá)式(expressions)可以像語(yǔ)句一樣工作,這就是為什么也有Expression這樣的語(yǔ)句。但是,另一方面,語(yǔ)句也不能像表達(dá)式一樣工作。
7:IIFE,模塊和名稱(chēng)空間

一種常用的函數(shù)編碼模式有一個(gè)奇特的名字:立即調(diào)用函數(shù)表達(dá)式。或者更加準(zhǔn)確的來(lái)說(shuō)被稱(chēng)為IIFE,發(fā)音為“iffy”。
8:消息隊(duì)列和事件循環(huán)

“JavaScript是如何異步和單線(xiàn)程的”?答案是js語(yǔ)言是單線(xiàn)程,異步行為不是js語(yǔ)言本身的一部分,而是它們建立在瀏覽器(或者編程環(huán)境)中的js語(yǔ)言之上,并通過(guò)瀏覽器API訪(fǎng)問(wèn)。
9:setTimeout,setInterval和requestAnimationFrame

我們可以決定不去馬上執(zhí)行一個(gè)函數(shù),而是在一個(gè)確切的時(shí)間之后。這被稱(chēng)作為“預(yù)約電話(huà)”。
10:JavaScript引擎

為web編寫(xiě)代碼有時(shí)會(huì)感覺(jué)有點(diǎn)神奇,因?yàn)殚_(kāi)發(fā)人員編寫(xiě)了一系列的字符,這些字符轉(zhuǎn)化成了瀏覽器中具體的圖像,文字和動(dòng)作。理解這項(xiàng)技術(shù)能夠幫助開(kāi)發(fā)者更好的調(diào)整作為程序員的技能。
11:位操作符,類(lèi)型數(shù)組和數(shù)組緩沖區(qū)

好的,從技術(shù)上來(lái)說(shuō),對(duì)于計(jì)算機(jī)來(lái)講所有的東西都會(huì)歸結(jié)為1和0。它不使用數(shù)字、字符或者字符串來(lái)操作,它只用二進(jìn)制數(shù)字(bits)。這個(gè)簡(jiǎn)單解釋的版本是所有的東西都會(huì)以二進(jìn)制的方式儲(chǔ)存。然后計(jì)算機(jī)使用像UTF-8之類(lèi)的編碼將之前保存的位組合映射到字符,數(shù)字或者不同的符號(hào)(ELI5版本)。
12:DOM和LayoutTrees(布局樹(shù)圖)

文檔對(duì)象模型,通常被成為“DOM,”它是使網(wǎng)站具有互動(dòng)性的一個(gè)重要組成部分。它是一種允許編程語(yǔ)言去操縱內(nèi)容,結(jié)構(gòu)和網(wǎng)站風(fēng)格的界面。JavaScript是連接網(wǎng)絡(luò)瀏覽器中的DOM客戶(hù)端腳本語(yǔ)言。
13:工廠(chǎng)和類(lèi)

JavaScript是一種基于原型的語(yǔ)言,意味著對(duì)象的屬性和方法能夠被分享通過(guò)克隆和擴(kuò)展能力。這被稱(chēng)為原型繼承并且它與類(lèi)繼承不同。
14:this、調(diào)用、應(yīng)用 和綁定

這些函數(shù)對(duì)于每一個(gè)JavaScript開(kāi)發(fā)者來(lái)說(shuō)都是非常重要的并且它們幾乎被使用在每一個(gè)JavaScript庫(kù)和框架上。
15:操作符,構(gòu)造函數(shù),instanceof和instances

每一個(gè)JavaScript對(duì)象都有一個(gè)原型。在JavaScript中所以的對(duì)象都會(huì)從他們的原型中繼承它們的方法和屬性。
16:原型繼承和原型鏈

對(duì)于在類(lèi)基礎(chǔ)語(yǔ)言(像Java或者C+)上有經(jīng)驗(yàn)的開(kāi)發(fā)者來(lái)說(shuō),JavaScript是有些令人困惑的,因?yàn)樗麄兪莿?dòng)態(tài)的并且本質(zhì)上不能提供類(lèi)執(zhí)行(calss關(guān)鍵字被引入在ES2015,但它是語(yǔ)法糖,JavaScript仍是原型基礎(chǔ))。
17:Object.create和Object.assign

Object.crea方法是JavaScript中創(chuàng)造新的對(duì)象的方法之一。
18:映射,reduce,filter

即使你不知道什么是函數(shù)式編程,你可能也在一直使用map,filter和reduce,因?yàn)樗鼈兪欠浅5暮糜貌⑶夷軌蚴鼓愕木幋a更加的整潔,看起來(lái)不是那么糟糕。
19:純函數(shù),副作用,狀態(tài)突變和事件傳播

很多的bug都與IO有關(guān),數(shù)據(jù)突變以及副作用軸承代碼。從一些事情例如接收新用戶(hù),通過(guò)http調(diào)用意料之外的響應(yīng),或者編寫(xiě)文件系統(tǒng),這些都在我們的代碼數(shù)據(jù)庫(kù)中蔓延。不幸的是,這是一個(gè)我們逐漸接受習(xí)慣去應(yīng)對(duì)的殘酷的現(xiàn)實(shí)。
20:閉包

閉包是將函數(shù)與周?chē)鸂顟B(tài)(詞法環(huán)境)捆綁在一起(封閉)的組合。換句話(huà)說(shuō),閉包允許你從內(nèi)部函數(shù)訪(fǎng)問(wèn)外部函數(shù)的作用域。在JavaScript中,每次創(chuàng)建函數(shù)時(shí)都會(huì)在創(chuàng)建函數(shù)時(shí)創(chuàng)建閉包。
21:高階函數(shù)

JavaScript能夠接受高階函數(shù)。這個(gè)處理高階函數(shù)的能力,在其他字符當(dāng)中,能夠使JavaScript任意一種編程語(yǔ)言更加符合函數(shù)編程。
22:集合和生成器

Generator對(duì)象是有生成器函數(shù)返回并且也符合可迭代協(xié)議和迭代器協(xié)議。
23:Promises

Promise對(duì)象代表異步運(yùn)作最終的完成(或失敗)以及它的結(jié)果值。
24:async/await

有一種特殊的語(yǔ)法能夠以一種更加舒適的方式處理primise,這種方式被稱(chēng)為“async/await”.同時(shí),它也非常容易被理解和使用。
25:數(shù)據(jù)結(jié)構(gòu)

JavaScript每天都在發(fā)展。隨著框架和平臺(tái)的快速增長(zhǎng),像React,Angular,Vue,NodeJS,Electron,React Native,在大規(guī)模的應(yīng)用中使用JavaScript已經(jīng)非常普遍了。
26:ExpensiveOperation 和BigO Notation

“什么是BigONotation?”對(duì)于開(kāi)發(fā)者來(lái)說(shuō)這是一個(gè)很常見(jiàn)的面試工作問(wèn)題,簡(jiǎn)而言之,,它是算法運(yùn)行時(shí)間的數(shù)學(xué)表達(dá)式,它取決于輸入時(shí)間的長(zhǎng)短,通常用來(lái)討論最壞的情況。
27:算法

在數(shù)學(xué)和計(jì)算機(jī)科學(xué)中,算法是定義明確的有限序列,通常來(lái)講,是用于解決一類(lèi)特定的問(wèn)題或者執(zhí)行計(jì)算。
28:繼承,多態(tài)性和代碼重要

類(lèi)繼承是一個(gè)類(lèi)擴(kuò)展到另一個(gè)類(lèi)的方式,所以我們能創(chuàng)建新的函數(shù)是在現(xiàn)存的基礎(chǔ)上。
29:設(shè)計(jì)模式

每個(gè)開(kāi)發(fā)者都會(huì)努力去寫(xiě)可維護(hù),可讀的,可重用的代碼。隨著應(yīng)用程序的不斷擴(kuò)大,編碼結(jié)構(gòu)變得越來(lái)越重要。設(shè)計(jì)模式被證實(shí)是解決這一挑戰(zhàn)的關(guān)鍵,同時(shí)也為特定環(huán)境中的普遍問(wèn)題提供組織結(jié)構(gòu)。
30:偏函數(shù),柯里化,compose函數(shù)和pipe

函數(shù)構(gòu)造是一個(gè)由多個(gè)簡(jiǎn)單的函數(shù)構(gòu)成更復(fù)雜的函數(shù)的機(jī)制。
31:代碼整潔

編寫(xiě)易于理解的并且可維護(hù)的代碼是每一個(gè)開(kāi)發(fā)者走向王者的至關(guān)重要的技能。
好了今天的分享就到這里了,有什么想看的可以給法醫(yī)留言哦!
RECOMMEND
? ?
很感謝小伙伴看到最后??,如果您覺(jué)得這篇文章有幫助到您的的話(huà)不妨關(guān)注?+點(diǎn)贊??+收藏??+評(píng)論??,您的支持就是我更新的最大動(dòng)力。
歡迎加入前端獵手技術(shù)交流群??,文末掃碼加我微信,我拉你進(jìn)群,一起交流技術(shù)以及代碼之外的一切???♀?
