【发布时间】:2016-05-06 15:17:47
【问题描述】:
阅读 typescript 中的“枚举”,我看到这段代码编译为 javascript。
var Season = [];
Season[Season["Spring"] = 0] = "Spring";
Season[Season["Summer"] = 1] = "Summer";
Season[Season["Fall"] = 2] = "Fall";
Season[Season["Winter"] = 3] = "Winter";
console.log(Season.Spring); // 0
console.log(Season[0]); // Spring
并且,如果我在第一行将 Season 更改为 {} 空 objext,这也有效,而且很有意义。 不知道怎么回事,听着。 这是什么?
编辑:是的。这不是编译器生成的。编译器使用空对象。但是,如果我将其更改为空数组。它仍然有效。我的问题是为什么数组也很好用。起初我的问题包括两个版本,但有人编辑了问题并删除了对象使用版本。
【问题讨论】:
-
编译器编写 JavaScript 时会发生这种情况。
-
其实这不是编译器生成的。看我的回答stackoverflow.com/a/35075698/390330
-
数组是对象,因此如果您所做的只是使用方括号表示法分配属性,那么两者的行为完全相同。数组有一个特殊的长度属性,但在其他方面并不特殊(它们继承的属性大多是通用的,可以应用于任何合适的对象)。
-
@RobG 谢谢,这就是我想知道的。
标签: javascript arrays object enums typescript