一粟矿、變量的解構(gòu)賦值
1)數(shù)組和對象解構(gòu)的區(qū)別
- 數(shù)組的元素是按次序排列的,變量取值由 位置 決定
let [x, y] = [1, 2, 3];
x // 1
y // 2
如果x,y位置互換了,則值也變了
···
let [y, x] = [1, 2, 3];
x // 2
y // 1
···
- 對象的屬性是沒次序的, 變量必須與屬性同名才能取到正確的值
let { foo,baz } = { foo: 'aaa', bar: 'bbb' };
foo //'aaa'
baz // undefined
- 如果解構(gòu)失敗,變量的值就等于undefined
2) 賦值的話必須嵌套()嗜价,否則會報錯, 加上()瀏覽器會把()里的內(nèi)容當做表達式去解析
let obj = {};
let arr = [];
//解構(gòu)賦值允許等號左邊的模式之中,不放置任何變量名
({foo:obj.prop, bar: arr[0]} = {foo:123, bar:true})
obj //{prop:123}
arr // [true]
3)如果要將一個已經(jīng)聲明的變量用于解構(gòu)賦值幕庐,必須非常小心久锥。
// 錯誤的寫法
let x;
{x} = {x: 1};
// SyntaxError: syntax error
代碼的寫法會報錯,因為 JavaScript 引擎會將{x}理解成一個代碼塊异剥,從而發(fā)生語法錯誤瑟由。所以需要跟2)一樣加上()才能避免 JavaScript 將其解釋為代碼塊
4) 對數(shù)組進行對象屬性的解構(gòu),因為數(shù)組其實就是個特殊的對象
let arr = [1, 2, 3];
let {0 : first, [arr.length - 1] : last} = arr;
first // 1
last // 3