Javascript:为什么我的array.length不起作用?

时间:2010-02-09 01:13:52

标签: javascript

版本1:

var spamfoo = new Array();
spamfoo.push(['name', 'url']);
spamfoo.push(['dog', 'cat']);
alert(spamfoo);
// Alerts: name,url,dog,cat
alert(spamfoo.length);
// Alerts: 2
// ??? (shouldn't this be 4?)

第2版:

var spamfoo = new Array();
spamfoo.push(['name', 'url']);
spamfoo = spamfoo + ['dog', 'cat'];
alert(spamfoo);
// Alerts: name,url,dog,cat
alert(spamfoo.length);
// Alerts: 15
// ??? (this one I wasn't sure about anyways because I didn't know if you could add an array)

这怎么可能? ['value', 'value']不是一个数组而不是?

5 个答案:

答案 0 :(得分:3)

答案是my_array.length确实有效,但您错过了一些正在发生的隐式类型转换以及push()所做的事情。

在第一个示例中,您将创建一个多维数组。从技术上讲,它是一个数组数组而不是真正的多维数组。第一个代码片段创建了这个数组数组:

[
  ["name", "url"],
  ["dog", "cat"]
]

长度为2,结果正确。

第二个示例使用连接运算符+spamfoo转换为字符串,这意味着length现在返回字符串长度。字符串长度为15,所以这也是正确的。

您可能希望将此行添加到示例中:

alert(typeof spamfoo);

如果是这样,您会看到第一个示例显示object,第二个示例显示string

答案 1 :(得分:3)

对于第一部分,您将获得一个嵌套数组(2x2),因此spamfoo.length返回2.它看起来像:

[
    ['name', 'url'],
    ['dog', 'cat']
]

第二部分是cletus said above,是一种类型转换为字符串

答案 2 :(得分:1)

您希望在推送之前展平这些数组。试试这个:

var spamfoo = [];
Array.prototype.push.apply(spamfoo, ["name", "url"]);
Array.prototype.push.apply(spamfoo, ["dog", "cat"]);
alert(spamfoo.length); // alerts 4

答案 3 :(得分:0)

这样做

var spamfoo = new Array(); var x = [“name”,“url”,“d”]; spamfoo.push(“name”,“url”,“d”); spamfoo.push( “XXXX”); //spamfoo.push('dog');

//提醒:姓名,网址,狗,猫 警报(spamfoo.length);

答案 4 :(得分:0)

我发布的第一个是错的。还有额外的“var x = xxxxxxxxx”

这是正确的。

var spamfoo = new Array();

spamfoo.push("name", "url","d");
spamfoo.push("xxxx");
//spamfoo.push('dog');

// Alerts: name,url,dog,cat
alert(spamfoo.length);

K prime是对的..这是一个错误spamfoo.push(['name','url']); spamfoo.push(['dog','cat']);

将数组插入数组对象。