1,解構賦值
- 解構物件和陣列的區別是,物件解構出的屬性名必須一致,而陣列的隨意。
1.1,解構物件
1.1.1,直接解構物件
允許將某個物件的欄位的作用域本地化。
也就是說,提取自己需要的欄位,併為它們建立相應的變數。並且這個變數的宣告,會受到關鍵字var
或是let
的影響,
function fun() {
let person = {
name: 'www',
age: 100,
sex: 'girl'
}
var {name, sex} = person
console.log(name, sex) // www girl
}
console.log(window.sex) // undefined
複製程式碼
1.1.2,解構作為引數傳入的物件
這裡,解構了傳入的物件
let getPerson = person => {
// let {firstname} = person
// console.log(`${firstname} is man`)
console.log(`${person.firstname} is man`)
}
let person = {
firstname: 'Beckham',
lastname: 'David'
}
getPerson(person)
複製程式碼
也可以直接在傳參時解構
let getPerson = ({firstname}) => {
console.log(`${firstname} is man`)
}
let person = {
firstname: 'Beckham',
lastname: 'David'
}
getPerson(person)
複製程式碼
1.2,解構陣列
1.2.1,基礎用法
直接解構,是按陣列的順序進行的
let [first] = ['beijing', 'shanghai', 'shenzhen']
console.log(first) // beijing
let [first, second] = ['beijing', 'shanghai', 'shenzhen']
console.log(first, second) // beijing shanghai
複製程式碼
可以使用逗號,進行列表的匹配,跳過不需要的值
let [,,thrid] = ['beijing', 'shanghai', 'shenzhen']
console.log(thrid) // shenzhen
複製程式碼
1.2.2,其他用法
- 利用陣列進行,變數宣告並賦值時
let arr = ["one", "two", "three"];
let [first, second, third] = arr;
console.log(first); // "one"
console.log(second); // "two"
console.log(third); // "three"
複製程式碼
- 變數先宣告後賦值時
let a, b;
[a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2
複製程式碼
- 可以在解構賦值時,設定預設值
let a, b;
[a=5, b=7] = [1];
console.log(a); // 1
console.log(b); // 7
複製程式碼
- 交換變數,可以不用定義第三個變數
let a = 1;
let b = 3;
[a, b] = [b, a];
console.log(a); // 3
console.log(b); // 1
複製程式碼
2,語義增強
與解構恰恰相反,可以從全域性作用域中獲取變數,並將其轉為一個物件。
陣列類似。
let name = 'Backham',
age = 100,
print = function () {
console.log(`${this.name},${this.age} `)
}
let person = {name, age, print}
person.print() // Backham,100
複製程式碼
3,擴充套件運算子(三點運算子)
3.1,陣列
3.1.1,可以聯合陣列與陣列,或陣列與變數的內容
let country1 = ['beijing', 'shanghai', 'shenzhen']
let country2 = ['hangzhou', 'chengdu']
let all = [...country1, ...country2]
console.log(all.join()) // beijing, shanghai, shenzhen, hangzhou, chengdu
let c = 'suzhou'
let a = [c, ...country2]
console.log(a.join()) // suzhou, hangzhou, chengdu
複製程式碼
3.1.2,可以拆解陣列
let [first, ...country] = ['beijing', 'shanghai', 'shenzhen']
console.log(country.join()) // shanghai,shenzhen
複製程式碼
3.1.3,可以進行淺克隆
tips,淺克隆:當物件或陣列的欄位值被複制時,欄位所引用物件不會被複制。
let country = ['beijing', 'shanghai', 'shenzhen', {sex: 108}]
let country1 = [...country]
let c = country
console.log(c === country) //true,c和country指向同一個引用
console.log(country1 === country) // false,country1是一個新的陣列
console.log(country[3] === country1[3]) //true
複製程式碼
用處,可以在使用一些會影響原陣列的方法時,使用它的淺克隆物件。
比如,獲取陣列的最後一個元素,而不影響原陣列(當然使用length-1
更優雅,這裡只是舉一個栗子)
let [...country] = ['beijing', 'shanghai', 'shenzhen']
let [last] = country.reverse()
console.log(last) // shenzhen
複製程式碼
3.2,物件
- 物件類似。