[英]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.