javascript assoc数组添加键值对意外结果

cra*_*wap 0 javascript jquery

这可能很明显,但为什么在为这个javascript数组添加键值对时,我没有得到预期的JSON字符串?

下一步:当代码显示时,我实际上希望在对象中有两个数据集.

jsFiddle here - 很奇怪,目前只在Chrome中"有效"

var myKey = "123", myVal="Car";
var arrSummat = new Array();

$('#mybutt').click(function(){
    arrSummat["987"] = "Boat";
    //arrSummat[myKey] = myVal;
    var test = JSON.stringify(arrSummat);
    alert(test);
});
Run Code Online (Sandbox Code Playgroud)

Bra*_*uck 5

在JavaScript中构建关联数组*或哈希映射或对象可能不是非常明显.首先,一切都是最终的对象,因此与关联数组一起使用的语法对于不是"关联数组"的所有内容都是有效的,这可能是出现混淆的地方.首先让我们解决手头的问题.您可能想要使用对象而不是数组:

arrSummat = {};
arrSummat["987"] = "Boat";
console.log(JSON.stringify(arrSummat)); // => {"987":"Boat"}
Run Code Online (Sandbox Code Playgroud)

当你运行你的小提琴(在Chrome中)时,我几乎得到一个包含986个null值的数组然后"Boat"(我可能错了,我不会null在那个警报中计算s).

现在您已经解决了原始问题,我想指出您可能想要开始做的两件事:

首选objets和数组的简写语法.这两个示例在功能上是相同的,但您应该更喜欢第二个用于大多数目的.

var myArr = new Array();
var myObj = new Object();
Run Code Online (Sandbox Code Playgroud)

是相同的:

var myArr = [];
var myObj = {};
Run Code Online (Sandbox Code Playgroud)

简写甚至可以带有一些基本值:

var myArr = [1, 2, 3];
var myObj = {one: "1", two: "2"};
Run Code Online (Sandbox Code Playgroud)

其次,永远不要将Array对象用作数组以外的任何东西.这样做在语法上是有效的,但它会产生意想不到的结果(正如你在这里看到的那样).

  • JavaScript中没有"关联数组",但对象通常用作替代品并提供类似的功能.

Revised jsFiddle Link