2017-10-20 166 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)将保持不变。