Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的数组长度不正确_Javascript_Node.js - Fatal编程技术网

javascript中的数组长度不正确

javascript中的数组长度不正确,javascript,node.js,Javascript,Node.js,我有一个如下的数组 arr=[]; arr[0]={"zero": "apple"}; arr[1]={"one": "orange"}; arr["fancy"]="what?"; 但是当我执行console.log(arr.length)时,我得到了length作为2。 并且在执行console.log(JSON.stringify(arr))时无法获取所有值 这里的问题是什么 这里是fiddle的链接。length是Javascript数组中的一个特殊属性,它被定义为“数

我有一个如下的数组

  arr=[];
  arr[0]={"zero": "apple"};
  arr[1]={"one": "orange"};
  arr["fancy"]="what?";
但是当我执行
console.log(arr.length)
时,我得到了length作为2
并且在执行console.log(JSON.stringify(arr))时无法获取所有值 这里的问题是什么


这里是fiddle的链接。length是Javascript数组中的一个特殊属性,它被定义为“数组中最大的数字索引加上一”(或
2^32-1
,无论先到的是什么)。这并不是顾名思义的“元素数量”


当您直接使用
for..of
map
迭代数组时,或者间接使用
JSON.stringify
迭代数组时,JS只循环从0到
长度-1
的所有数字,如果该数字下有属性,则输出/返回它。它不研究其他属性。

对于
哈希表
关联数组
的数组,
长度
属性不能像人们期望的那样工作。此属性仅适用于数字索引数组(和规范化数组,即无孔数组)。但是有一种方法可以获取
关联数组的长度,首先必须使用
Object.keys(arr)
关联数组中获取键列表,然后可以在此列表上使用length属性(即标准化索引数组)。如下一个示例所示:

arr=[];
arr[0]={“零”:“苹果”};
arr[1]={“一”:“橙色”};
arr[“幻想”]=“什么?”;

console.log(Object.keys(arr.length))来自数组的MDN描述,“数组不能使用字符串作为元素索引(如在关联数组中),但必须使用整数。”

换句话说,这不是Javascript数组语法
arr[“fancy”]=“什么?”


这导致了
.length

中的错误,您希望
arr[“fancy”]=“what?”是长度的一部分吗?文档数组当然有一个
length
属性(这正是您的问题所在),因此根据您显然期望的逻辑,
[]。length
应该是
1
(因为它有一个
length
属性)。一般来说,向数组中添加字符串键不是一个好主意-但是如果确实需要使用它们,那么不,它们不会影响自动更新的
length
属性。在执行console.log(JSON.stringify(arr))时无法获取所有值在执行console.log(JSON.stringify(arr))时无法获取所有值在执行console.log(JSON.stringify(arr))@NIshamMahsin更新时无法获取所有值,并为您的评论提供了答案。不知道是谁在MDN上写了这一段,但这太愚蠢了。MDN只是一个维基,不是权威来源,你需要仔细检查你在那里读到的所有内容。@georg,请阅读这个相关问题的公认答案。可能关联数组和数组之间存在混淆。同样参考,在数组部分下面是对象。是的,同样的混乱也在那里。数组中没有专用的“数据存储”,您可以完美地为其分配字符串属性。事实上,所有数组属性都是字符串,即使它们看起来像整数。@georg,。。如前所述,在关联数组混淆部分下,
var myAssocArray=[];myAssocArray[“foo”]=“bar”“上面的示例是一个被滥用的数组对象。上面的代码之所以有效,仅仅是因为数组也是对象。”我建议您阅读权威来源ECMA标准,该标准非常清楚地说明了数组是什么,它们不是什么。以下是链接:。玩得高兴