es6--變量的解構賦值
阿新 • • 發佈:2018-05-01
表達 element ... ava 進行 解構賦值 .get java 獲取元素
[1] 是只含元素 1 的數組
[0] 是取數組的第 0 個元素
[1][0] 的結果就是 1 拉
[1][0] === undefined 只是個條件判斷而已,即 1 === undefined
基本用法:
以前為變量賦值只能直接指定值;
var a = 1; var b = 2; var c = 3;
而es6允許寫成下面這樣:
var [a, b, c] = [1, 2, 3];
上面的代碼表示:可以從數組中提取值,按照位置的對應關系對變量賦值。
舉個獲取元素的例子
<div id="app"> <div id="top">1</div> <div id="main">2</div> <div id="footer">3</div> </div> <script> function $(id) { return document.getElementById(id); } var [mytop, mymain, myfooter] = [$("top"),$("main"),$("footer")]; alert(myfooter.innerHTML) // 1 </script>
本質上,這種寫法屬於"模式匹配",只要等號兩邊的模式相同,左邊的變量就會賦予對應的值,下面的是使用嵌套數組進行解構的例子。
let [foo, [[bar], baz]] = [1, [[2], 3]]; foo // 1 bar // 2 baz // 3 let [,, third] = ["foo", "bar", "baz"]; third // "baz" let [x,, y] = [1, 2, 3]; x // 1 y // 3 let [head, ...tail] = [1, 2, 3, 4]; head // 1 tail // [2, 3, 4] let [x, y, ...z] = ["a"]; x // "a" y // "undefined" z // []
如果解析不成功,變量的值就會變成 undefined.
var [foo] = []; var [bar, foo] = [1];
以上兩種情況都屬於解構不成功,foo的值都會等於undefined.
另一種情況是不完全解構,即左邊的模式只匹配等號右邊數組的一部分。這種情況下,解構依然可以成功。
let [x, y] = [1, 2, 3]; x // 1 y // 2 let [a, [b],d]] = [1, [2, 3], 4]; a // 1; b // 2 c // 4 上面的例子都屬於不完全解構,但是可以成功。 如果等號的右邊不是數組(或者嚴格說,不是可便利的結構),那麽將會報錯。 // 報錯 let [foo] = 1; let [foo] = false; let [foo] = NaN; let [foo] = undefined; let [foo] = null; let [foo] = {};
默認值
解構賦值允許指定默認值。var [foo = true] = [];foo // true
[x, y = "b"] = ["a"]; // x = "a", y = "b" [x, y = "b"] = ["a", undefined] // x = "a", y = "b"; 主要ES6內部使用嚴格相等符(===)判斷一個位置是否有值。所以如果一個數組成員不嚴格等於undefined,默認值是不會生效的。 var [x, y] = [undefined]; x //1; var [x = 1] = [null] x // null 上面的代碼中,如果一個數組成員是null,默認值就不會生效,因為null不嚴格等於undefined. 如果默認值是一個表達式,那麽這個表達式是惰性求值,即只有在用到的時候才會求值 function f() { console.log("aaa"); } let [x = f()] = [1]; *上面的代碼因為x能取到值,所以函數f根本不會執行。上面的代碼其實等價與以下代碼。 let x; if ([1][0] === undefined) { x = f(); } else { x = [1][0] }
默認值可以引用解構賦值的其他變量,但該變量必須已經聲明。 let [x = 1, y = x] = []; // x = 1; y = 1 let [x = 1, y = x] = [2] // x = 2; y = 2 let [x = y, y = 1] = []; // ReferenceError
上面的最後一個表達式之所以會報錯,是因為 x用到默認值y時y還沒有聲明。
註:
[1] 是只含元素 1 的數組
[0] 是取數組的第 0 個元素
[1][0] 的結果就是 1 拉
[1][0] === undefined 只是個條件判斷而已,即 1 === undefined
es6--變量的解構賦值