[英]How to make associative array with number as string in Javascript
我有一個代碼:
var index = 100;
var arr =[];
arr[index.toString()] = "Hello"
結果:索引仍然稱為整數而不是字符串。 任何人都可以解釋我的代碼有什么問題嗎?
您必須使用{}
聲明關聯數組 ,這會創建一個新object
,因為在JavaScript中,數組始終使用編號索引。
您需要聲明一個對象: var arr={};
var index = 100; var arr ={}; arr[index.toString()] = "Hello"; console.log(arr);
如何在Javascript中以數字為字符串的關聯數組
從沒有經常使用術語的意義上講,JavaScript沒有關聯數組。 它具有對象,從ES2015(又稱“ ES6”)開始,它具有Map
。
結果:索引仍然稱為整數而不是字符串。 任何人都可以解釋我的代碼有什么問題嗎?
index
變量的值仍然是一個數字,是的,因為您沒有做任何更改。 但是數組中的索引是一個字符串(即使您沒有使用.toString()
),因為標准數組實際上並不是真正的數組 1 ,它們是經過特殊處理的一類屬性的對象(其名稱是符合數組索引的規范定義的字符串的名稱),特殊的length
屬性,並使用Array.prototype
作為其原型。
這證明數組索引是字符串:
var a = []; a[0] = "zero"; for (var name in a) { console.log("name == " + name + ", typeof name == " + typeof name); }
就是說,當您想要通用對象或映射時,您不想使用數組。
這里使用通用對象進行名稱/值映射:
var o = Object.create(null); var name = "answer"; o[name] = 42; console.log(o[name]); // 42
對象中的屬性名稱是字符串或(從ES2015開始)符號。 我使用Object.create(null)
創建對象,因此它不會以Object.prototype
作為其原型,因為這會給我們提供我們不希望使用的屬性( toString
, valueOf
等)。對象作為地圖。
這是使用Map
:
var m = new Map(); var name = "answer"; m.set(name, 42); console.log(m.get(name)); // 42
Map
與對象相比的主要優點是:
for-of
來遍歷它們包含的映射 Map
的size
屬性告訴您它們有多少個條目 Map
保證其條目的迭代按照條目添加到地圖的順序執行 JavaScript不支持帶有命名索引的數組 ,在JavaScript中,數組始終使用編號索引。
如果您使用命名索引,JavaScript會將數組重新定義為標准對象。 之后,所有數組方法和屬性將產生錯誤的結果。
如以下示例所示:
var person = []; person["firstName"] = "John"; person["lastName"] = "Doe"; person["age"] = 46; var x = person.length; // person.length will return 0 console.log(x); var y = person[0]; // person[0] will return undefined console.log(y);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.