gpt4 book ai didi

javascript - 当 JavaScript 中的数组对象递增时会发生什么?

转载 作者:行者123 更新时间:2023-12-02 14:49:28 26 4
gpt4 key购买 nike

一个非常简单的问题,但我找不到任何答案。检查以下代码。

var myArray = [0,1,2,3,4,5,6,7,8,9];

for(i=0; i < myArray.length; myArray++){
console.log("Loop iteration step : "+i);
}

console.log("After array increment : " + myArray);

myArray++ 不是拼写错误。如您所见,代码只会运行一次。运行一次后,循环终止,myArray 变为 NaN。

数组发生了什么?数组如何变成 NaN?

P.S:好的,更多信息,因为每个人都好奇为什么 myArray++ 不是拼写错误。是的,一开始是一个错字。这就是我想出这个的方法但这不是我这里遇到的问题。我添加了完整的循环,因为我想显示出现此错误的位置。

最佳答案

编辑:我已经修正了关于增量操作数作用的一些(可耻的)误解。我犯了同样的错误,没有查找实际的文档。我希望这可以帮助其他用户不要犯同样的错误。 (感谢您指出这一点@gurvinder372。)

我强烈建议您查找“Increment ”的文档,第一句话解释了发生的情况:

The increment operator increments (adds one to) its operand and returns a value.

人们会认为Increment operator ++行为如下:

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"

你可以假设它分配了一个 string返回myArray ,当 increment operatorfor loop评估,它确定值不是数字,因此 NaN ,和for loop当条件 i<NaN 时,在第二次迭代之前退出计算结果为false 。尝试一下:

var a = "a";
a++;
NaN

但是这并不完全正确(我搞砸了myArray++实际上在幕后所做的事情,最好了解它实际发生的情况)。查看 Postfix Increment 的实际规范运算符,我们得到以下结果:

步骤

myArray++

  1. lhs = myArray
  2. 旧值 = Number(myArray)

    oldValue = NaN

  3. 新值 = oldValue + 1

    新值 = NaN + 1

    新值 = NaN

  4. myArray = NaN
  5. Postfix Increment运算符返回oldValueNaN现在myArray=NaN

那么你的 for loop 中最终会得到什么?第一次迭代后 Postfix Increment运算符运行的是:

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

我希望这有助于澄清循环的每个步骤和部分中发生的情况以及原因 myArray最终值为 NaN .

这里有一些有趣的事情可以尝试一下,看看您是否理解为什么在这个无限循环中您的myArray保持为[...]但是counterNaN第二次通话后。

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.
}

回答

你会得到无限循环,因为你的表达式 i<myArray.length将始终评估为 Truei从未被修改。同时,counter将转到NaN由于帖子开头所解释的内容,在第一次迭代之后。 myArray保持凉爽,因为 Postfix Increment完成于counter 。为什么这个循环会迭代,而你所做的循环却不会?因为在你所做的那个中,你最终改变了 myArray 的值进入NaN强制循环中的表达式 i<NaN.length ---> i<undefined成为false第一次迭代后,导致循环退出。

关于javascript - 当 JavaScript 中的数组对象递增时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48223284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com