ES6的版本問題
- ES5正式版產(chǎn)生出09年12月
- ES6則出現(xiàn)于15年6月
let
let 用于申明變量斜脂,但只在當(dāng)前'{}'包裹的代碼塊內(nèi)引用有效,出了當(dāng)前塊級作用域就會失效;
let 申明變量不存在申明提升的問題鸵钝,必須先申明后引用吹由;
-
let與for循環(huán)配合,可以有效解決申明var i = 0帶來的傳值/傳址問題才顿;for循環(huán)申明的let i = 0與循環(huán)體內(nèi)的let i = 123不會沖突莫湘,兩者作用域不同;
let解決傳值問題
for循環(huán)的let變量申明與內(nèi)部let變量申明無影響 -
暫時性死區(qū):只要塊級作用域內(nèi)存在let命令郑气,它所聲明的變量就“綁定”(binding)這個區(qū)域幅垮,不再受外部的影響。
暫時性死區(qū) -
塊級作用域內(nèi)申明函數(shù):函數(shù)聲明語句的行為類似于let竣贪,在塊級作用域之外不可引用军洼,然而在實際使用時,為了兼容老版本代碼演怎,塊級作用域內(nèi)申明函數(shù)會報錯匕争。建議使用函數(shù)表達(dá)式來申明。
塊級作用域內(nèi)的函數(shù)
const
- const 申明變量時必須賦值爷耀,賦值不可改變甘桑;
-
const 并不是變量的值不得改動,而是變量指向的那個內(nèi)存地址所保存的數(shù)據(jù)不得改動歹叮。對于簡單類型的數(shù)據(jù)(數(shù)值跑杭、字符串、布爾值)咆耿,值就保存在變量指向的那個內(nèi)存地址德谅,因此等同于常量。但對于復(fù)合類型的數(shù)據(jù)(主要是對象和數(shù)組)萨螺,變量指向的內(nèi)存地址窄做,保存的只是一個指向?qū)嶋H數(shù)據(jù)的指針愧驱,const只能保證這個指針是固定的(即總是指向另一個固定的地址),至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的椭盏,就完全不能控制
const關(guān)注的是內(nèi)存地址不變
申明變量的6種方式
- var 與 function
- let 與 const
- import 與 class
頂層對象
-
取到頂層對象的勉強(qiáng)辦法:
獲取頂層對象
解構(gòu)賦值
-
默認(rèn)值:ES6 內(nèi)部使用嚴(yán)格相等運算符(===)组砚,判斷一個位置是否有值。所以掏颊,只有當(dāng)一個數(shù)組成員嚴(yán)格等于undefined糟红,默認(rèn)值才會生效
默認(rèn)值必須為undefined -
默認(rèn)值:如果默認(rèn)值是一個表達(dá)式,那么這個表達(dá)式是惰性求值的乌叶,即只有在用到的時候盆偿,才會求值。
等號右邊不是undefined枉昏,所以默認(rèn)賦值失敗
嵌套解構(gòu)與對象解構(gòu)
解構(gòu)與函數(shù)入?yún)?/h3>
-
入?yún)r利用解構(gòu)設(shè)置默認(rèn)值
解構(gòu)時設(shè)置默認(rèn)值
-
區(qū)別于函數(shù)的默認(rèn)配置:只要入?yún)⒉粸榭粘赂兀呐率莧}空對象,也無法啟用默認(rèn)配置
函數(shù)的默認(rèn)配置
解構(gòu)時圓括號的使用注意事項
-
?? 賦值語句的非模式部分
賦值語句的非模式匹配部分
-
? 變量聲明語句
變量申明不可使用圓括號
-
? 函數(shù)參數(shù)
函數(shù)申明也不可用圓括號
-
? 賦值語句的模式
賦值語句
入?yún)r利用解構(gòu)設(shè)置默認(rèn)值
區(qū)別于函數(shù)的默認(rèn)配置:只要入?yún)⒉粸榭粘赂兀呐率莧}空對象,也無法啟用默認(rèn)配置
?? 賦值語句的非模式部分
? 變量聲明語句
? 函數(shù)參數(shù)
? 賦值語句的模式