2017-10-20 75 views
1

我有一些繼承打字稿代碼看起來像這樣(內部的功能的):打字稿常量X = [... this.x]

const Statuses = [...this.Statuses] 

this.Statuses指的狀態代碼的陣列(定義爲Statuses = status [];)在同一個.ts文件中定義。在上面這行代碼之後,代碼在狀態

上運行我試圖理解[... this.var]語法的作用是什麼?爲什麼不簡單地引用這個。狀態在第一位?

是的,我是新來的javascript/typescript ....

在此先感謝。

+0

JavaScript ES6或JS 2016,增加了很多新功能。這是其中之一。請花30分鐘的時間閱讀ES6。它會幫助你理解新的語法。 https://babeljs.io/learn-es2015/ – xdeepakv

+1

@DeepakSharma:沒有JS 2016這樣的東西。我想你的意思是ES2015。 –

+0

無論男人,我舉例與附加鏈接。沒有什麼個人的 – xdeepakv

回答

3

它是「spread notation」,它將this.Statuses(它必須是某種類型的Iterable,比如數組)分散到離散元素中。在這種情況下,那些形成一個新的數組(因爲...this.Statuses[],它創建一個數組)。

因此,如果this.Statuses是一個數組,它在功能上與const Statuses = this.Statuses.slice();(或以下)相同。

如果this.Statuses是另一種Iterable,它的功能與const Statuses = Array.from(this.Statuses);相同。

+4

@jcalz:OMG,談論自動駕駛。修正了,謝謝。 (我的字面意思是「......它展開......」,但仍然錯過了我說「休息」。嘆息。至少我沒有稱它爲操作員。:-)) –

1

這是一個美觀的方式複製一個數組,以避免突變到原來的。它使用擴展語法,如其他答案中所述。

const a = [ 1 ] 
 
const b = a 
 
const c = [...a] 
 

 
b.push(2) 
 
c.push(3) 
 

 
console.log(` original: ${a}`) 
 
console.log(`reference: ${b}`) 
 
console.log(`  copy: ${c}`)

1

這是spread syntax。它允許將項目從一個數組(或對象)複製到另一個。在你的情況下,它被用來製作this.Statuses的淺拷貝,以避免原始數組突變。感謝你的這個例子,當你推新物品到Statuses時,原始數組(this.Statuses)將保持不變。