【发布时间】:2010-10-02 00:16:49
【问题描述】:
我一直在玩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 />");
长度:5
我的数组 [0] = 1
我的数组 [1] = 2
我的数组 [2] = 3
我的数组 [3] = 4
我的数组 [4] = 5
1、2、3、4、5
这段代码没有什么特别之处,但我知道 javascript 数组是一个对象,所以属性可能会添加到数组中,这些属性添加到数组的方式对我来说似乎不一致。
在继续之前,让我注意如何在 javascript 中将字符串值转换为数字值。
非空字符串 -> 字符串或 NaN 的数值
空字符串 -> 0
因此,由于 javascript 数组是一个对象,因此以下内容是合法的:
myArray["someThing"] = "someThing";
myArray[""] = "Empty String";
myArray["4"] = "four";
for( var i in myArray){
document.write( "myArray[" + i + "] = " + myArray[i] + "<br />");
}
document.write(myArray.join(", ") + "<br /><br />");
长度:5
我的数组 [0] = 1
我的数组 [1] = 2
我的数组 [2] = 3
我的数组 [3] = 4
myArray[4] = 四
myArray[someThing] = someThing
myArray[] = 空字符串
1、2、3、4、4
输出是意外的。
在设置属性myArray["4"]时,非空字符串“4”被转换成它的数值,这看起来是对的。但是,空字符串“”不会转换为它的数值,0,它被视为空字符串。此外,非空字符串“something”不会转换为其数值 NaN,它被视为字符串。那么它是哪一个? myArray[] 中的语句是在数字还是字符串上下文中?
另外,为什么 myArray 的两个非数字属性没有包含在 myArray.length 和 myArray.join(", ") 中?
【问题讨论】:
标签: javascript arrays type-conversion