鏈接:https://juejin.im/post/5d9bf530518825427b27639d
聲明
- const命令:聲明常量
- let命令:聲明變量
作用
作用域
- 全局作用域
- 函數(shù)作用域:function() {}
- 塊級(jí)作用域:{}
作用范圍
- var 命令在全局代碼中執(zhí)行
- const命令和let命令只能在代碼塊中執(zhí)行
賦值使用
- const命令聲明常量后必須立馬賦值
- let命令聲明變量后可立馬賦值或使用時(shí)賦值
聲明方法:var、const、let、function、class、import
重點(diǎn)難點(diǎn)
- 不允許重復(fù)聲明
- 未定義就使用會(huì)報(bào)錯(cuò):const命令和let命令不存在變量提升(有爭(zhēng)議)
- 暫時(shí)性死區(qū):在代碼塊內(nèi)使用let命令聲明變量之前,該變量都不可用
解構(gòu)賦值
- 字符串解構(gòu):const [a, b, c, d, e] = "hello"
- 數(shù)值解構(gòu):const { toString: s } = 123
- 布爾值解構(gòu):const { toString: b } = true
- 對(duì)象解構(gòu)
- 形式:const { x, y } = { x: 1, y: 2 }
- 默認(rèn):const { x, y = 2 } = { x: 1 }
- 改名:const { x, y: z } = { x: 1, y: 2 }
- 數(shù)組解構(gòu)
- 規(guī)則:數(shù)據(jù)結(jié)構(gòu)具有Iterator接口可采用數(shù)組形式的解構(gòu)賦值
- 形式:const [x, y] = [1, 2]
- 默認(rèn):const [x, y = 2] = [1]
- 函數(shù)參數(shù)解構(gòu)
- 數(shù)組解構(gòu):function Func([x = 0, y = 1]) {}
- 對(duì)象解構(gòu):function Func({ x = 0, y = 1 } = {}) {}
應(yīng)用場(chǎng)景
- 交換變量值:[x, y] = [y, x]
- 返回函數(shù)多個(gè)值:const [x, y, z] = Func()
- 定義函數(shù)參數(shù):Func([1, 2])
- 提取JSON數(shù)據(jù):const { name, version } = packageJson
- 定義函數(shù)參數(shù)默認(rèn)值:function Func({ x = 1, y = 2 } = {}) {}
- 遍歷Map結(jié)構(gòu):for (let [k, v] of Map) {}
- 輸入模塊指定屬性和方法:const { readFile, writeFile } = require("fs")
重點(diǎn)難點(diǎn)
- 匹配模式:只要等號(hào)兩邊的模式相同,左邊的變量就會(huì)被賦予對(duì)應(yīng)的值
- 解構(gòu)賦值規(guī)則:只要等號(hào)右邊的值不是對(duì)象或數(shù)組,就先將其轉(zhuǎn)為對(duì)象
- 解構(gòu)默認(rèn)值生效條件:屬性值嚴(yán)格等于undefined
- 解構(gòu)遵循匹配模式
- 解構(gòu)不成功時(shí)變量的值等于undefined
- undefined和null無法轉(zhuǎn)為對(duì)象,因此無法進(jìn)行解構(gòu)






