簡體   English   中英

array.push是一種重新分配的形式嗎?

[英]Is array.push a form of reassignment?

我正在一個包含幾個javascript文件的項目中工作,我正在做的部分工作是遷移現有代碼以使用更新的ES6 +功能,以及確保我們遵守AirBnB Eslint規則

因此,鑒於上下文,這是具體情況:

let meta = [a.platform];

就在下面:

meta.push(a.browserName ? a.browserName : 'any');

所以現在短信給了我一個警告: 'meta永遠不會被重新分配。 使用const代替'


我明白meta = somethingNew會重新分配變量。 但在這種情況下,這個變量是不是也與它創建時的變量不同?

或者,使其更加清晰

我可以使用const來定義將接收新項目的數組嗎? 如果沒有,為什么?

另外,如果不是:為什么短號會發出警告?

meta.push()不會重新分配變量,它只是修改變量引用的數組 - 它仍然是相同的數組,但具有不同的內容。 所以你可以使用const作為變量聲明,因為你永遠不會讓它引用不同的數組。

如果分配給數組元素,情況也是如此。 還行吧:

const meta = [a.platform];
meta[1] = somethingNew;

第二個賦值不會改變meta ,它會改變數組。

你唯一要知道的是const與不變性無關 const只是允許你阻止重新分配,這意味着你不能這樣做:

 // OK const foo = ''; const bar = []; const baz = {}; // WTF are we doing!? foo = 'Foo'; bar = ['Bar']; baz = {baz: 'Baz'}; 

但是,在JavaScript中,對象值是可變的; 與不可變的原始值相反。 因此,如果將字符串放在const ,即使使用String.prototype方法(返回新字符串),也無法對其進行修改。

 const str = 'Lorem ipsum'; console.log(str.slice(6)); // This is actually a new string... console.log(str); // The original string has not been modified! 

但它與數組或對象文字完全不同,但是:

 const arr = []; const obj = {}; arr.push('Foo'); arr.push('Bar'); obj.foo = 'Foo'; obj.bar = 'Bar'; console.log(arr); // Modified! console.log(obj); // Modified! 

在這一點上,應該很清楚:linter顯示了這個警告,因為確實,meta永遠不會被重新分配......變異不是重新分配。

暫無
暫無

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

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