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