let和const
var關鍵字定義變量的特點:
- 可以重複定義
- 不能定義常量
- 不支持塊級作用域
let的特點
- 不可以重複定義
- 變量不能提升,在變量定義之前,不能使用
- 在大括號當中定義的變量(塊級作用域中),在作用域外無法訪問
- 解決一些ES5當中需要閉包實現的功能,比如:每隔1秒循環輸出一個當前的值
const的特點
- 常量一旦定義,就不能被修改
- 如果常量的值是一個引用類型,引用對象的屬性還是可以修改的
結構賦值
ES6允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱爲結構。
let arr = [1,2,3];
let [a,b,c] = arr;
let [,,m] = arr;
// m = 3
let [d,...e] = arr;
// d = 1
// e = [2,3]
let [f,g,...h] = [1];
// f = 1
// g = undefined
// h = []
let obj = {
name:"mmcai",
age:28,
long:165
}
let {name,age,long} = obj;
// name = "mmcai"
// age = 28
// long = 165
let {name:myName,age:myAge} = obj;
// myName = "mmcai"
// myAge = 28
let {name,...O} = obj;
// name = "mmcai"
// O = {
age:28,
long:165
}
特點
- 可以通過“模式匹配”的寫法從數組或者對象中取出來值,直接賦值給某變量
- 不完全解構,等號左邊的模式,只匹配右邊的一部分
- 解構賦值可以指定默認值,如果從等號右邊取出來的值是undefined,就會使用指定的默認值
- 數組的解構賦值要完全按照數組的秩序取值,對象不需要
- 如果解構賦值等號右邊是布爾或者數值,會先轉爲對象
- 字符串也可以執行結構賦值,字符串結構賦值的時候,被當做類數組的對象
- 函數的參數也可以使用解構默認賦值,往往還會設置默認值,當參數沒有的時候,直接使用默認值
-
以下三種解構賦值不能使用圓括號
- 變量生命語句
- 函數參數
- 賦值語句的模式
用途
- 交換變量的值
- 從函數返回多個值
- 函數參數的定義
- 提取JSON數據
- 函數參數的默認值
- 遍歷Map結構
- 輸入模塊的指定方法
字符串擴展
- 字符的Unicode表示法
- 使用for...of循環遍歷字符串,ES6字符串添加了遍歷器接口Iterator
- 模板字符串,ES6自帶模板解析引擎
- 模板字符串可以直接跟在函數名後面,該函數將被調用來處理這個模板字符串
模板字符串
ES6當中字符串使用反引號(`)標識,字符串當中嵌入變量可以通過${}來添加,比如:
const {name,age} = {
name:"mmcai",
age:28
}
const str = `我的名字是${name},我今年${age}歲了`;
其實模板字符串,就是ES6本身自帶了一個模板引擎,來對特殊的內容進行解析,大概原理如下:
let compile = (desc){
return desc.replace(/\$\{([^}]+)\}/g,(matched,key)=>{
return eval(key);
}
}
- 模板字符串使用`標識,使用${}包括嵌入的變量
- 模板字符串可以換行
- 當我們需要自定義模板引擎的時候,可以使用標籤模板,通過函數來實現
字符串新增方法
- includes——判斷字符串中是否包含某字符串,返回布爾值
- startsWith——字符串頭部是否有某字符串,返回布爾值
- endsWith——字符串結尾是否有某字符串,返回布爾值
- repeat——返回一個重複了n次的新字符串。
- trimStart——消除字符串頭部空格
- trimEnd——消除尾部空格
- padStart——從頭部補全字符串
- padEnd——從尾部補全字符串