關鍵字 | 變量提高 | 塊級做用域 | 初始值 | 更改值 | 經過window調用 |
---|---|---|---|---|---|
var | √ | x | - | Yes | Yes |
let | x | √ | - | Yes | No |
const | x | √ | Yes | No | No |
// 1.變量和值一一對應
let arr = [1, 2, 3];
let [a, b, c] = arr;
console.log(a,b,c); // 1 2 3
複製代碼
// 2. 變量多,值少
let arr = [1, 5, 8];
let [a, b, c, d] = arr;
console.log(a, b, c, d); // 1 5 8 undefined
複製代碼
// 3. 變量少,值多
let arr = [5, 9, 10, 8, 3, 2];
let [a, b] = arr;
console.log(a, b); // 5, 9
複製代碼
// 4.按需取值
let arr = [5, 9, 10, 8, 3, 2];
let [, , a, , b] = arr; // 不須要用變量接收的值,用空位佔位
console.log(a, b); // 10, 3
複製代碼
// 5.剩餘值
let arr = [5, 9, 10, 8, 3, 2];
let [a, b, ...c] = arr; // ...c 接收剩餘的其餘值,獲得的c是一個數組
console.log(a, b, c);
// 結果:
// a = 5,
// b = 9,
// c = [10, 8, 3, 2]
複製代碼
// 6.複雜的狀況,只要符合模式.便可解構
let arr = ['zhangsan', 18, ['175cm', '65kg']];
let [, , [a, b]] = arr;
console.log(a, b); // 175cm 65kg
複製代碼
// 1. 變量名和屬性名同樣
let { foo, bar } = {foo: 'aaa', bar: 'bbb'};
console.log(foo, bar); // aaa, bbb
let {a, c} = {a: 'hello', b: 'world'};
console.log(a, c); // hello, undefined
複製代碼
// 2. 經過 :來更改變量名
let {a, b:c} = {a: 'hello', b: 'world'};
console.log(a, c); // hello, world
複製代碼
// 3. 變量名和屬性名一致便可獲取到值,不須要一一對應
let {b} = {a: 'hello', b: 'world'};
console.log(b); // world
複製代碼
// 4. 剩餘值
let obj = {name:'橘右京', age:20, gender:'男'};
let {name, ...a} = obj;
console.log(name, a); // name = zs a = {age: 20, gender: "男"};
複製代碼
// 5. 複雜狀況,只要符合模式,便可解構
let obj = {
name: '不知火舞',
age: 22,
dog: {
name: '娜可露露',
age: 13
}
};
let {dog: {name, age}} = obj;
console.log(name, age); // 娜可露露 13
複製代碼
// 假設服務器上的獲取的數據以下
let res = {
data: ['a', 'b', 'c'],
meta: {
code: 200,
msg: '獲取數據成功'
}
}
// 如何獲取到 code 和 msg
let { meta: { code, msg } } = res;
console.log(code, msg); // 200, 獲取數據成功
複製代碼
this
指向外部做用域中的this
,箭頭函數沒有本身的this
arguments
// ES5 中給參數設置默認值的變通作法
function fn(x, y) {
y = y || 'world';
console.log(x, y);
}
fn(1)
// ES6 中給函數設置默認值
function fn(x, y = 'world') {
console.log(x, y);
}
fn(2)
fn(2,3)
複製代碼
// 參數不少,不肯定多少個,可使用剩餘參數
function fn(...values) {
console.log(values); // [6, 1, 100, 9, 10]
}
// 調用
console.log(fn(6, 1, 100, 9, 10));
複製代碼
rest參數只能是最後一個參數 數組
// 合併兩個數組
let arr1 = [1, 2];
let arr2 = [3, 4];
let arr3 = [...arr1, ...arr2];
console.log(arr3); // [1, 2, 3, 4]
複製代碼
let fakeArr = {
0: 'a',
1: 'b',
2: 'c',
length: 3
};
let arr = Array.from(fakeArr);
console.log(arr); // ['a', 'b', 'c']
複製代碼
[...new Set(arr)]
方式二: Array.from(new Set(arr))
class之間能夠經過extends關鍵字實現繼承,bash
Promise解決了回調地獄的問題,回調地獄指一個函數中有太多的異步操做,會產生大量的嵌套,難以閱讀和維護.服務器
Promise會讓代碼變得更容易維護,像寫同步代碼同樣,業務邏輯性更易懂異步