零碎的知識點……
1.空值合併運算符(Nullish coalescing operator)
const foo = null ?? 'default string';
2.js中的假值有哪些?
[0, '', NaN, null, undefined]
3.javascript和native通信的場景
4.javascript的數組索引取值是怎麼進行的?
可以將數組的索引用引號引起來,比如 years[2] 可以寫成 years['2']。 years[2] 中的 2 會被 JavaScript 解釋器通過調用 toString 隱式轉換成字符串,然後取值。
5.javascript執行上下文和執行棧
https://mp.weixin.qq.com/s/3fW_OvnyX-uk_9NfbJKcDw
三種js上下文:全局執行上下文、函數執行上下文(包括arguments)、eval執行上下文
執行上下文的生命週期:創建階段、執行階段、回收階段
在創建階段,先創建變量對象,再創建作用域鏈(scope chain),當作用域鏈開始解析對象時,先從代碼最內層嵌套開始,向上查找變量對象,最後確定this指向。
在執行階段,變量賦值、代碼執行。
在回收階段,執行上下文出棧,等待虛擬機回收執行上下文。
變量聲明提升:即使變量在被聲明之前使用,也不會報錯,此時變量值是undefined,提升到上下文頭部。
函數聲明提升:函數定義可以直接聲明function a或者函數表達式聲明 var a = function。
函數與變量同名時:函數優先級高,變量會被覆蓋,但是可以可以重新賦值,從上到下執行。
this的值是在執行階段的時候才能確認,定義的時候不能確認。
改變this指向的五種方法:fn.call 、fn.apply 、fn.bind、 with 、箭頭函數, 都可以。
執行上下文棧:管理執行上下文。js引擎通過上下文棧來存儲函數,遵循先進後出,所以window是最後一個出棧的。js是單線程,所有的上下文都要排隊順序執行。內建的異常機制都是沿着函數調用棧的函數調用逆向搜索,直到遇到異常處理代碼爲止。
6.eval(不怎麼用,一直記不住,哈哈哈)
eval() 函數可計算某個字符串,並執行其中的的 JavaScript 代碼。
console.log(eval(“2+2”)) // 4
7.with語句
擴展一個語句的作用域鏈。
8.console.time 計時器 測試環境評估性能
console.time("answer time"); alert("Click to continue"); console.timeLog("answer time"); alert("Do a bunch of other stuff..."); console.timeEnd("answer time");
9.polyfill
將新 API 轉換爲舊瀏覽器可以理解的代碼。
Babel是轉換新語法,polyfill是轉換新的api。那哪些是新語法,那些是新的api呢?
舉個例子:
新的語法:箭頭函數、es6的class、let symbol聲明
新的api:Array.of, Array.from、promise/map/set/include、generator、async函數