[英]JavaScript - short way of declaring an associative array
是否有像PHP中那樣聲明關聯數組的簡短方法?
$myArray = array('a' => 'b'); // PHP Way
在JavaScript中我會這樣做:
var myArray = [];
myArray['a'] = 'b';
我不是在尋找JavaScript對象。
聲明一個這樣的對象:
var myArray = {"a": "b", "c": "d"};
...然后像這樣引用每個項目:
var somethingElse = myArray["a"]; //Sets "somethingElse" to "b".
正如@Chris和@Marc在評論中提到的:在JavaScript中,對象是關聯數組,反之亦然,它們只是指兩種不同的方式來做同樣的事情。 例如...
var somethingElse = myArray["a"];
var anotherVariable = myArray.a;
... 做同樣的事。
JavaScript沒有關聯數組。 在您的示例中,您將myArray
聲明為數組,然后為其分配一個對象。 所以你的代碼與此沒有什么不同:
var myObject = {};
myObject['a'] = 'b';
更新:稍作修正。 實際上,原始代碼不會破壞數組。 它只是附加一個常規屬性。 這是可能的,因為JavaScript數組是JavaScript對象的子集。
我不是在尋找JavaScript對象。
JavaScript中沒有“關聯數組”,只有由屬性名稱和值組成的對象可以這樣處理。 所以,你所尋找的實際上是對象。 實際上,您的問題中的這個示例是使用對象:
var myArray = [];
myArray['a'] = 'b';
alert(typeof myArray); // 'object'
您最初使用數組文字語法構造對象:
var myArray = [];
這意味着您已創建一個繼承自Array.prototype
的對象。 基本上,您正在處理一個已使用存儲在Array.prototype
的方法進行擴充的對象。
要檢查myArray
實際上是一個數組(好吧,我會說JavaScript數組是偽數組),你可以檢查它的構造函數:
alert(typeof myArray === 'object' && myArray.constructor === Array);
還有一種更好的方法可以識別在不同窗口和框架中構建的數組:
alert(Object.prototype.toString.apply(myArray) === '[object Array]');
您還可以使用instanceOf
:
alert(myArray instanceof Array);
或Array.isArray
:
alert(Array.isArray(myArray));
在javascript中,關聯數組,鍵控集合,哈希,......無論你想要什么,它們都不是特殊類型。 以下所有都很好。
a = {}
a[3] = 15
a.b = "c"
a['def'] = 'something'
此代碼生成一個具有您期望的屬性的有效對象。 他們都是。 您可以在一個對象中組合常規索引數組和關聯數組。
至於一次聲明一大堆,通常的語法是:
a = {
'key1' : 'val1',
'key2' : val2,
key3 : val3,
key4 : "val4"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.