我有一個代碼:如何使數關聯數組作爲字符串在Javascript
var index = 100;
var arr =[];
arr[index.toString()] = "Hello"
結果:指數仍稱爲整數字符串。任何人都可以解釋我的代碼有什麼問題?
我有一個代碼:如何使數關聯數組作爲字符串在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);
沒有。數組是對象,它們可以具有非索引屬性(事實上,甚至數組索引也是字符串)。 –
@ T.J.Crowder,數組是一種特殊的對象,帶有編號索引。 –
對。哪些是字符串。從[規範](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-object-type):「一個*整數索引*是一個字符串值的屬性鍵是一個規範的數字字符串(見7.1.16),其數值是+0或正整數≤2^53-1。*數組索引*是一個*整數索引*,其數值i在範圍+0 ≤I<2^32-1「。 –
隨着ES6,你可以使用一個Map
,持有任何類型的關鍵。
var map = new Map;
map.set(100, "Hello");
map.set('100', "Foo");
console.log(map.get(100)); // 'Hello'
console.log(map.get('100')); // 'Foo'
console.log([...map]);
如何使數關聯數組作爲字符串在Javascript
JavaScript沒有在長期頻繁使用感關聯數組。它有對象,並且從ES2015(又名「ES6」)開始,它有Map
s。
結果:索引仍稱爲整數不是字符串。任何人都可以解釋我的代碼有什麼問題?
的index
變量的價值仍然是一個號碼,是的,因爲你沒有做任何事情去改變它。但是,數組中的索引是一個字符串(即使您沒有使用.toString()
也是如此),因爲標準數組是aren't really arrays at all ,它們是對一類屬性進行特殊處理的對象(名稱是字符串的對象符合規範的數組索引定義),一個特殊的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
■找過對象是:
Map
S中的映射,使用for-of
循環有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);
_如果使用命名索引,JavaScript會將數組重新定義爲標準對象。之後,所有的數組方法和屬性都會產生不正確的結果。不,這不是它的工作方式。數組也是一個對象,您可以將值分配給數字索引或命名屬性,兩者都可以工作。僅僅因爲您將值指定給命名屬性,數組不會切換到「對象模式」。數字索引和'.length'之後的工作方式相同。當然,如果我們談論優化_性能可能會改變,但實際的_behavior_不會改變。 –
數組索引是整數,使用對象'變種ARR = {}' –
@PranavCBalan:實際上,一個鍵數組是字符串,就像任何其他對象一樣。 –
JavaScript沒有「關聯數組」。但更重要的是,你試圖解決的實際問題是什麼?儘可能簡單地將編碼問題簡化爲例子,但也許我們在這裏做得太過分了。你想解決什麼現實生活中的問題?代碼的輸入和期望的輸出是什麼? –