数组键 number 和“number”意外地被认为是相同的

2023-12-04

我一直在玩 javascript 数组,我遇到了一些不一致的地方,我希望有人能为我解释一下。

让我们从这个开始:


var myArray = [1, 2, 3, 4, 5];
document.write("Length: " + myArray.length + "<br />");
for( var i in myArray){
   document.write( "myArray[" + i + "] = " + myArray[i] + "<br />");
}
document.write(myArray.join(", ") + "<br /><br />");


Length: 5
myArray[0] = 1
myArray[1] = 2
myArray[2] = 3
myArray[3] = 4
myArray[4] = 5
1, 2, 3, 4, 5
  

这段代码没有什么特别的,但我知道javascript数组是一个对象,因此可以将属性添加到数组中,这些属性添加到数组中的方式对我来说似乎不一致。

在继续之前,让我注意一下 JavaScript 中如何将字符串值转换为数字值。

  • 非空字符串 -> 字符串或 NaN 的数值

  • 空字符串 -> 0


JavaScript 数组的键实际上是字符串。有关任意键的映射类型的详细信息和实现,请检查这个答案.


澄清并补充 Jason 发布的内容:JavaScript 数组是对象。对象有属性。属性名称是一个字符串值。因此,在发生更多事情之前,数组索引也会转换为字符串。如果以下条件成立,则属性名称 P 将被视为数组索引(即,将调用特殊的 array-magic)(ECMA-262,15.4):

ToString(ToUint32(P)) 等于 P 并且 ToUint32(P) 不等于 2^32 − 1

可以轻松验证数字索引将转换为字符串(而不是相反):

var array = [];
array[1] = 'foo';
array['1'] = 'bar';
array['+1'] = 'baz';
document.writeln(array[1]); // outputs bar

另外,使用 a 迭代数组的条目是一种不好的做法for..in循环 - 如果有人弄乱了一些原型,你可能会得到意想不到的结果(而且它也不是很快)。使用标准for(var i= 0; i < array.length; ++i)反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组键 number 和“number”意外地被认为是相同的 的相关文章

随机推荐