当数组对象在JavaScript中递增时会发生什么?
这是一个非常简单的问题,但我在任何地方都找不到答案。检查以下代码当数组对象在JavaScript中递增时会发生什么?,javascript,Javascript,这是一个非常简单的问题,但我在任何地方都找不到答案。检查以下代码 var myArray=[0,1,2,3,4,5,6,7,8,9]; 对于(i=0;imyArray=myArray+1 当JavaScript计算myArray+1时,任何东西都可能发生这种情况。在这种情况下,只需尝试一下: var myArray = [0,1,2,3,4,5,6,7,8,9]; myArray + 1 "0,1,2,3,4,5,6,7,8,91" var a = "a"; a++; NaN 然后,您可以
var myArray=[0,1,2,3,4,5,6,7,8,9];
对于(i=0;i log(“在数组增量之后:+myArray”)代码>当您执行++
操作时,如果变量不是number类型,则将使用toString
将其转换为字符串,然后转换为number
Object.toString
返回[Object Object]
,因此Number('[Object Object]')
返回NaN
另外,当你这样做时,++
是++=
的缩写,所以myArray++
等于myArray=myArray+1代码>。既然您的myArray
不是数组,它就没有属性长度,返回undefined
(因为JS中的所有内容都是对象),循环就中断了
正如@正确指出的,Array.toString
返回Array.join
。所以它等于数字(“0,1,2…”)
。由于逗号(,
)不是有效的数字字符,因此它返回NaN
。此外,当将值与NaN
进行比较时,它返回false
,从而中断循环
示例:
var myArray=[0,1,2,3,4,5,6,7,8,9];
console.log(myArray.toString())
console.log(编号(myArray.toString())
console.log(1EDIT):我修正了一些(可耻的)关于增量操作数的错误概念。我犯了同样的错误,没有查找实际的文档。我希望这能帮助其他用户避免犯同样的错误。(感谢您指出@gurvinder372。)
我强烈建议您查阅“”的文档,第一句解释了发生的情况:
递增运算符递增(向其操作数加一)并返回一个值
人们会认为,Increment操作符+++
的行为如下:
myArray++
-->myArray=myArray+1
当JavaScript计算myArray+1时,任何东西都可能发生这种情况。在这种情况下,只需尝试一下:
var myArray = [0,1,2,3,4,5,6,7,8,9];
myArray + 1
"0,1,2,3,4,5,6,7,8,91"
var a = "a";
a++;
NaN
然后,您可以假设它将字符串分配回myArray
,当for循环
中的增量运算符
求值时,它确定值不是一个数字,因此NaN
和for循环
在条件i按照for后缀Incr进行第二次迭代之前退出操作员
让oldValue为tonNumber(GetValue(lhs))
及
因此myArray++
=>NaN
演示
var myArray=[0,1,2,3,4,5,6,7,8,9];
log(“仅使用后缀运算符递增”,myArray++);
myArray=[0,1,2,3,4,5,6,7,8,9];
log(“数字转换”,数字(myArray));
你可能会读到类型转换:认真地说,myArray++
不是打字错误?所以你确实想myArray++
,然后你会想知道为什么它只运行一次?:D也许你可以解释一下你想让这段代码做什么?我+,而不是myArray+,为什么?在这个问题的上下文中,它不是一个打字错误。是的,在现实世界中,如果我想迭代数组,这是一个输入错误。你不需要循环来演示这个问题。只需myArray=[1,2,3];myArray++;console.log(myArray);
array.toString
返回this.join(',')
,即“1,2,3,4,5,6,7,8,9,10”
,而不是[object object object object object object object object]
myArray++实际上是myArray=myArray+1;
循环的不会改变“0,1,2,3,4,5,6,7,8,91”
到NaN
。增量运算符本身正在做这件事,它不做串联。是的,增量运算符本身正在做这件事。然后只比较0,1,2,3,4,5,6,7,8,91
10(myArray.length)
返回false
。因此for
循环将完成。感谢您深入解释为什么for循环在一次迭代后也会停止。在发布问题之前我理解了这一部分,我的好奇心是数组是NaN
。现在问题已经解决了。
for ([initialization]; [condition]; [final-expression])
statement
for ([initialization]; i<myArray.length; NaN)
statement
for ([initialization]; i<NaN.length; NaN)
statement
for ([initialization]; i<undefined; NaN)
statement
for ([initialization]; false; NaN)
statement
var myArray = [1,2,3,4,5,6,7,8,9];
var counter = myArray;
for(let i=0; i<myArray.length; counter++){
console.log("Infinite calls. Never leaving and counter is " + counter);
// i++; if you don't want to eat up that infinite loop.
}
var myArray = [0,1,2,3,4,5,6,7,8,9];
Number(myArray) //NaN