簡體   English   中英

解構數組

[英]Destructuring Array

b 是未定義的,當分配 'a' 作為默認值時,它會得到它,但是當分配 'c' 值時,它會拋出一個錯誤,有人可以更好地解釋這里發生了什么,還是這是一個錯誤?

const [a, b = c, c] = [1, , 3]

解構為變量會按照數組(或屬性列表)的順序從左到右進行計算。

在初始化它們的行運行之前,不能訪問用const聲明的變量。

您的代碼相當於:

const arr = [1, , 3];
const a = arr[0];
const b = arr[1] === undefined ? arr[1] : c;
const c = arr[2];

這應該使問題非常明顯; 您正在嘗試在解釋器到達該點之前檢索c 這不是一個錯誤。

對於您要查找的 output,請先提取c ,以便將其用作b的默認值。

 const arr = [1, , 3]; const c = arr[2]; const [a, b = c] = arr; console.log(a, b, c);

但我也建議盡可能避免使用稀疏的 arrays,它們可能非常不直觀。

可以在一行中執行此操作。 您可以解構數組的鍵。 在第一個索引之前獲取第二個索引並將其設置為默認值。 這純粹是學術性的,請勿在實際代碼庫中使用它。

 const { 0: a, 2: c, 1: b = c } = [1, , 3] console.log(a, b, c)

const [a, b = c, c] = [1, , 3]

上面的陳述可以被認為是

 const a = [1, , 3][0]; const b = [1, , 3][1] || c; // Reference Error const c = [1, , 3][2]; console.log(a, b, c);

鑒於,下面的聲明

const [a, b = c, c] = [1, , 3]

可以認為是

 const a = [1, , 3][0]; const b = [1, , 3][1] || a; const c = [1, , 3][2]; console.log(a, b, c); //1 1 3

因此,在第一種情況下, c之前被引用過,它是否已初始化,這會產生錯誤,但在第二種情況下a在被引用時已經存在。

現在,如果您使用var嘗試相同的操作,那么在第一種情況下您不會因為提升而收到錯誤。

var [a, b = c, c] = [1, , 3]
console.log(a, b, c) //1 undefined 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM