Javascript JavasScript:my_array.length为什么不起作用?

Javascript JavasScript:my_array.length为什么不起作用?,javascript,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([

第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']
是否会生成数组?答案是
my_array.length
确实有效,但缺少一些正在发生的隐式类型转换以及
push()
所做的转换

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

[
  ["name", "url"],
  ["dog", "cat"]
]
其长度为2,因此结果是正确的

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

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

alert(typeof spamfoo);

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

,答案是
my_array.length
可以工作,但缺少一些正在发生的隐式类型转换以及
push()
所做的操作

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

[
  ["name", "url"],
  ["dog", "cat"]
]
其长度为2,因此结果是正确的

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

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

alert(typeof spamfoo);

如果是这样,您将看到第一个示例显示
object
,第二个示例显示
string
,对于第一部分,您将得到一个嵌套数组(2x2),因此
spamfoo.length
返回2。它看起来像:

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

第二部分是as,是一个类型转换为字符串。对于第一部分,您将得到一个嵌套数组(2x2),因此
spamfoo.length
返回2。它看起来像:

[
    ['name', 'url'],
    ['dog', 'cat']
]
第二部分是as,是一个类型转换为string

var spamfoo=新数组(); 变量x=[“名称”、“url”、“d”]; spamfoo.push(“名称”、“url”、“d”); spamfoo.push(“xxxx”); //spamfoo.push(“狗”)

//警报:名称、url、狗、猫 警报(spamfoo.length)

像这样做

var spamfoo=新数组(); 变量x=[“名称”、“url”、“d”]; spamfoo.push(“名称”、“url”、“d”); spamfoo.push(“xxxx”); //spamfoo.push(“狗”)

//警报:名称、url、狗、猫
警报(spamfoo.length)

您希望在推送这些阵列之前将其展平。试试这个:

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

您希望在推送阵列之前将其展平。试试这个:

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

我贴的第一张是错的。还有额外的“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素数是对的。。这是一个错误spamfoo.push(['name','url']); spamfoo.push(['dog','cat'])


将数组插入数组对象。

我发布的第一个数组是错误的。还有额外的“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素数是对的。。这是一个错误spamfoo.push(['name','url']); spamfoo.push(['dog','cat'])


将数组插入数组对象。

+1。同意。推两次后,容器将包含两件东西。这应该是可以接受的答案。是的,我同意。基本上是将另一个数组对象插入到数组中。+1。同意。推两次后,容器将包含两件东西。这应该是可以接受的答案。是的,我同意。基本上是将另一个数组对象插入到数组中。