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

我是法醫(yī),一只治療系前端碼猿??,與代碼對話,傾聽它們心底的呼聲,期待著大家的點(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),請多指正
關(guān)于js你真正了解多少呢?你可能知道如何去寫函數(shù),理解簡單的算法,甚至可能會編寫類。但是你知道什么是類型化數(shù)組嗎?
你不需要立刻知道這些概念的全部,但是,你最終會在你今后的事業(yè)中需要到它們。這就是我為什么建議將這些寫成一個列表,因?yàn)橛泻艽罂赡?,你會遇到它們其中的一個主題,并且會想要一個教程為了完全的理解它們。
1:調(diào)用棧

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

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

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

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

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

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

一種常用的函數(shù)編碼模式有一個奇特的名字:立即調(diào)用函數(shù)表達(dá)式?;蛘吒訙?zhǔn)確的來說被稱為IIFE,發(fā)音為“iffy”。
8:消息隊(duì)列和事件循環(huán)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Promise對象代表異步運(yùn)作最終的完成(或失?。┮约八慕Y(jié)果值。
24:async/await

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

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

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

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

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

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

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

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