JavaScript陣列解構賦值
ES2015之前,變數的賦值格式非常固定,程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼let webName="螞蟻部落"; let url; url="http://www.softwhy.com"
上面是已經司空見慣不能再簡單的變數賦值方式,宣告的同時賦值或者先宣告再賦值。
ES2015開始新增多種賦值方式,本文介紹其中的陣列解構賦值,其他結構賦值參閱相關文章。
陣列解構賦值程式碼演示如下:
[JavaScript] 純文字檢視 複製程式碼let [webName, url, address,age] = ["螞蟻部落", "www.softwhy.com", "青島市南區",4]; console.log(webName,url,address,age);
程式碼執行效果截圖如下:
成功實現了為變數的賦值效果,陣列結構賦值解釋如下:
按照指定模式從右側陣列中提取值,然後給左側陣列相同模式的變數進賦值,這就是陣列結構賦值。
陣列解構賦值程式碼例項:
[JavaScript] 純文字檢視 複製程式碼let [webName, [[url,address], age]] = ["螞蟻部落", [["www.softwhy.com","青島市南區"], 4]]; console.log(webName); console.log(url); console.log(address); console.log(age);
程式碼執行效果截圖如下:
賦值成功,由此可見巢狀的陣列結構也可以實現解構賦值。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let [webName, , age] = ["螞蟻部落", "www.softwhy.com", 4]; console.log(webName); console.log(age);
上面的程式碼雖然在模式中空缺了一個變數,不過依然可以進行賦值。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let [webName,age] = ["螞蟻部落"]; console.log(webName); console.log(age);
如果解構賦值不成功,那麼變數值為undefined。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let [webName,age] = ["螞蟻部落",4,"www.softwhy.com"]; let [x,[y],z] = [1, [2,3,4], 5]; console.log(webName); console.log(age); console.log(x); console.log(y); console.log(z);
左邊的模式可以不完全匹配右邊的陣列。
等號右側是非陣列:
如果等號右側不是陣列,那麼就要分情況處理:
(1).如果是物件,那麼判斷是否具有Iterator介面。
(2).如果是值型別,那麼首先轉換為物件,然後再判斷這個物件是否具有Iterator介面。
只要一個結構具有Iterator介面都可以進行陣列結構賦值。
關於Iterator介面可以參閱ES2015 Iterator遍歷器一章節。
[JavaScript] 純文字檢視 複製程式碼let [num] = 8; let [bool] = true; let [un] = undefined; let [nan] = NaN; let [nu] = null; let [obj] = {};
程式碼都會報錯。右邊值,要麼無法轉換為物件,要麼轉換後的物件沒有Iterator介面,{}本身就沒有此介面。
再來看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let obj = {}; obj[Symbol.iterator] = function* () { yield 1; yield 2; yield 3; }; let [a,b,c]=obj; console.log(a); console.log(b); console.log(c);
只要有遍歷器介面,就可以使用陣列解構賦值。
關於上面的function* () {}函式可以參閱ES2015 Generator()一章節。
陣列解構賦值預設值:
解構賦值可以為模式中的變數指定預設值。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let [num = 5] = []; let [webName, url = "softwhy.com"] = ["螞蟻部落"]; let [age, address = "青島市南區"] = [4, undefined]; console.log(num); console.log(webName,url); console.log(age,address);
解構賦值,如果對應的值嚴格等於(===)undefined,那麼就使用預設值。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let [num = 5] = [null]; console.log(num);
儘管null==undefined,但是null!==undefined,所以預設值不會生效。
[JavaScript] 純文字檢視 複製程式碼function func(){ console.log("螞蟻部落"); return "螞蟻部落"; } let [webName = func()] = ["antzone"];
如果沒有滿足使用預設值的條件,那麼預設值的函式是不會被執行的。
[JavaScript] 純文字檢視 複製程式碼let [x = 1, y = x] = []; //下面的程式碼會報錯,因為y在宣告前就使用了 let [x = y, y = 1] = []
let宣告的變數一定要先宣告再使用,否則就會報錯。
相關文章
- Javascript 解構賦值,將屬性/值從物件/陣列中取出,賦值給其他變數JavaScript賦值物件陣列變數
- ES6學習-4 解構賦值(1)陣列的解構賦值賦值陣列
- JavaScript 物件解構賦值JavaScript物件賦值
- JavaScript 字串解構賦值JavaScript字串賦值
- JavaScript陣列解構JavaScript陣列
- JavaScript解構賦值的用途JavaScript賦值
- JavaScript函式引數解構賦值JavaScript函式賦值
- php7中為物件/關聯陣列進行解構賦值PHP物件陣列賦值
- 陣列未被賦值時其值為多少?陣列賦值
- 解構賦值賦值
- JavaScript 解構賦值小括號的應用JavaScript賦值
- 給numpy陣列賦同樣的值陣列
- JS解構賦值JS賦值
- JavaScript 陣列最大值和最小值JavaScript陣列
- PHP中陣列賦值效能及過程PHP陣列賦值
- 物件解構,陣列解構物件陣列
- JavaScript 獲取陣列中最大值JavaScript陣列
- JavaScript 陣列排序 與 求最大值JavaScript陣列排序
- c語言結構體中的一個char陣列怎麼賦值?C語言結構體陣列賦值
- es6-解構賦值賦值
- ES6 解構賦值賦值
- 變數的解構賦值變數賦值
- ES6解構賦值賦值
- JavaScript獲取陣列最大值和最小值JavaScript陣列
- JavaScript陣列中的最大值和最小值JavaScript陣列
- JavaScript陣列最大值、最小值和平均數JavaScript陣列
- JavaScript資料結構01 - 陣列JavaScript資料結構陣列
- JavaScript遍歷陣列詳解JavaScript陣列
- Java建立陣列、賦值的四種方式,宣告+建立+初始化 詳解Java陣列賦值
- js陣列解構 與 物件解構JS陣列物件
- JavaScript 連等賦值JavaScript賦值
- let-const-解構賦值-字串賦值字串
- ES6之解構賦值賦值
- ES6 解構賦值+改名賦值
- JavaScript資料結構之陣列棧佇列JavaScript資料結構陣列佇列
- JavaScript 陣列JavaScript陣列
- JavaScript陣列詳解-全網最全JavaScript陣列
- Javascript - 陣列和陣列的方法JavaScript陣列