let[x,y='b']=['a']; //x='a',y='b'
let[x,y='b']=['a',undefined]; //x='a',y='b'
//如果乙個陣列成員是null,預設值就不會生效,因為null不嚴格等於undefined。
let [x=1]=[null];
x //null
如果預設值是乙個表示式,那麼這個表示式是惰性求值的,即中只有在用到時才會求值
function f()
let[x=f()]=[1];
//x能取到值,所以函式f根本不會執行。等價的**如下
let x;
if([1][0]===undefined)else
let =;
foo //"aaa"
bar //"bbb"
let=;
baz undefined
//foo是匹配的模式,baz才是變數。真正被賦值的是變數baz
let=;
baz //"aaa"
foo //error:foo is not defined
let obj=
}};let]}=obj;
x //"hello"
y //『world"
//以上**這種的p是模式,不是變數,英雌不會被賦值。如果p也要作為變數賦值,可以寫成以下形式
let obj=
}};let]}=obj;
x //"hello"
y //『world"
//loc:},loc和start都是模式,只有line是變數,所以對應的是node中line值為1。
const node = }};
let , loc: } } = node;
line // 1
loc // object
start // object
//下面的例子中錯誤的原因是被認為是乙個塊級作用域,導致解構失敗,我們在使用解構要盡量避免這種大括號直接在行首的情況
// 錯誤的寫法
let x;
= ;// 正確的寫法
let x;
( = );
ES6之 解構賦值
es6允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構賦值 destructuring 也可以簡稱 解構。下面用 進一步解釋一下什麼叫解構賦值。1.關於給變數賦值,傳統的變數賦值是這樣的 var arr 1,2,3 把陣列的值分別賦給下面的變數 var a arr 0 var b...
ES6之解構賦值
1.es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 let a,b,c 1,2 3 2.如果等號的右邊不是陣列 或者嚴格地說,不是可遍歷的結構,參見 iterator 一章 那麼將會報錯。如下例 let foo 1 let foo false let foo nan l...
ES6之解構賦值
es6允許按照一定模式從陣列和物件中提取值,對變數進行賦值 稱為解構賦值 const aaa 張三 李四 王二 麻子 let zhang,li,wang,ma aaa console.log zhang 張三 console.log li 李四 console.log wang 王二 console...