[英]get index by value in javascript array
阅读打字稿中的'enum',我看到这段代码编译成了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,这也有效,这是有道理的。 我不知道发生了什么事。 这是什么?
编辑:是的。 这不是编译器生成的。 编译器使用空对象。 但是,如果我将其更改为空数组。 它仍然有效。 我的问题是为什么数组也很好。 起初我的问题包括两个版本,但有人编辑了问题并删除了对象使用版本。
这个:
Season[Season["Spring"] = 0] = "Spring";
Season[Season["Summer"] = 1] = "Summer";
Season[Season["Fall"] = 2] = "Fall";
Season[Season["Winter"] = 3] = "Winter";`
在Season对象中创建八个属性:
Season["Spring"] = 0;
Season["Summer"] = 1;
Season["Fall"] = 2;
Season["Winter"] = 3;
Season[0] = "Spring";
Season[1] = "Summer";
Season[2] = "Fall";
Season[3] = "Winter";
在那个季节之后可以要求:
看起来有人正试图让Season成为双向地图。
换句话说,您可以按数字索引或字符串值查找项目。
var season1 = Season[1]; // season1 == 'Summer'
var summerIndex = Season['Summer']; // summerIndex == 1
如果我在第一行将Season改为{}空objext,这也有效,这是有道理的
我有一些关于枚举的文档 ,但你的问题是为什么:
Season = [];
代替
Season = {};
实际上是以下TypeScript:
enum Season {
Spring,
Summer,
Fall,
Winter
}
生成JavaScript :
var Season;
(function (Season) {
Season[Season["Spring"] = 0] = "Spring";
Season[Season["Summer"] = 1] = "Summer";
Season[Season["Fall"] = 2] = "Fall";
Season[Season["Winter"] = 3] = "Winter";
})(Season || (Season = {}));
你可以看到Season = {}
。 所以它应该对你有意义。
不是你的问题但是,如果你对Season[Season["Spring"] = 0] = "Spring";
感到好奇Season[Season["Spring"] = 0] = "Spring";
这里有报道 。
如果你将代码块中的第一个语句改为var Season = [];
我将解答你为什么它仍然有效的问题var Season = [];
所以Season
是一个数组而不是一个空对象。 数组也是对象,您可以在JavaScript中设置您喜欢的任何属性,甚至是数组(只要您不通过Object.freeze
运行该对象)。 因此,表达式Season["Spring"] = 0
只是在Season
对象上设置一个名为“Spring”的属性,您可以使用Season["Spring"]
或Season.Spring
该Season.Spring
,就像在任何其他对象上一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.