1.聲明
? const命令:聲明常量
? let命令:聲明變量
作用域
? 全局作用域
? 函數(shù)作用域:function() {}
? 塊級作用域:{}
作用范圍
? var在全局代碼中執(zhí)行
? const和let只能在代碼塊中執(zhí)行
賦值使用
? const聲明常量后必須立馬賦值
? let聲明變量后可立馬賦值或使用時賦值
? 聲明方法:var、const峡谊、let、function瓜客、class、import
重點難點
? 不允許重復(fù)聲明
? 未定義就使用會報錯:const和let不存在變量提升
? 暫時性死區(qū):在代碼塊內(nèi)使用const和let聲明變量之前,該變量都不可用
2.解構(gòu)賦值
只要等號兩邊的模式相同配深,左邊的變量就會被賦予對應(yīng)的值
字符串解構(gòu):const [a, b, c, d, e] = "hello" // console.log(a) 結(jié)果 h
對象解構(gòu)
? 形式:const { x, y } = { x: 1, y: 2 }
? 默認:const { x, y = 2 } = { x: 1 }
? 改名:const aa = { x, y: z } = { x: 1, y: 2 }//console.log(aa,z)結(jié)果{x: 1, y: 2} 2
數(shù)組解構(gòu)
? 規(guī)則:數(shù)據(jù)結(jié)構(gòu)具有Iterator接口可采用數(shù)組形式的解構(gòu)賦值 // Array自帶Iterator
? 形式:const [x, y] = [1, 2]
? 默認:const [x, y = 2] = [1]
函數(shù)參數(shù)解構(gòu)
? 數(shù)組解構(gòu):function Func([x = 0, y = 1]) {} // 參數(shù)默認值
? 對象解構(gòu):function Func({ x = 0, y = 1 } = {}) {}
函數(shù)move的參數(shù)是一個對象,通過對這個對象進行解構(gòu)嫁盲,得到變量x和y的值。如果解構(gòu)失敗烈掠,x和y等于默認值羞秤。
例:function move({x = 0, y = 0} = {}) {return [x, y];}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, 0]
move({}); // [0, 0]
move(); // [0, 0]
應(yīng)用場景
? 交換變量值:[x, y] = [y, x]
? 返回函數(shù)多個值:const [x, y, z] = Func()
? 提取JSON數(shù)據(jù):const { name, version } = packageJson
? 定義函數(shù)參數(shù)默認值:function Func({ x = 1, y = 2 } = {}) {}
? 遍歷Map結(jié)構(gòu):for (let [key, value] of Map) {}
? 輸入模塊指定屬性和方法:const { readFile, writeFile } = require("fs")
重點難點
? 匹配模式:只要等號兩邊的模式相同,左邊的變量就會被賦予對應(yīng)的值
? 解構(gòu)賦值規(guī)則:只要等號右邊的值不是對象或數(shù)組左敌,就先將其轉(zhuǎn)為對象
? 解構(gòu)默認值生效條件:屬性值嚴格等于undefined
? 解構(gòu)遵循匹配模式
? 解構(gòu)不成功時變量的值等于undefined
? undefined和null無法轉(zhuǎn)為對象瘾蛋,因此無法進行解構(gòu)