javascript-日常雜記

零碎的知識點……

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函數

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章