2017-08-29 48 views
0

在關於不可變更新模式的redux文檔中,我注意到他們表示可以使用spread運算符更新對象,然後覆蓋屬性。您是否可以在不改變數據的情況下覆蓋對象文字定義中的屬性?

對象傳播運算符有什麼特別之處嗎?如果沒有,那麼爲什麼你可以在不改變數據的情況下覆蓋對象文字定義中的屬性(如下面的代碼中所示)?

const a = { 
    foo: 'bar', 
    foo: 'bla' 
} 
+0

它不是明白'...'擴展語法與接受多個相似鍵的對象字面量語法有關。 – zerkms

+0

「爲什麼可以覆蓋」---因爲標準允許。 – zerkms

+0

使用重複鍵的對象是您的棉絨應該捕捉的錯誤。 (這在舊版瀏覽器中不起作用,因爲他們不知道如何處理計算的屬性,所以他們只允許這樣做)。 – Bergi

回答

1

在對象的文字,我們可以用傳播運算符(...)把它插入從給定對象的屬性,對象字面... 所以如果你有:

const a = { 
    foo: 'bar', 
    test: 'test' 
} 

一新對象可以使用對象字面定義蔓延運營商創建..

const b = { 
    ...a, //spread operator that introduces object properties 
    foo:'bla' 
} 

b對象將是

{ foo: 'bla', test: 'test' } 

考慮到如果兩個屬性具有相同的名稱,則順序將定義哪一個優先,並且實際上我們可以覆蓋對象字面值中的屬性定義。

如果定義爲:

const b = { 
    foo:'bla', 
    ...a, //the spread operator is defined at the end 
} 

B對象將是:

{foo: "bar", test: "test"} 

參考this article

注:這是ES2018的建議,目前工作鉻..

相關問題