Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 - Fatal编程技术网

当数组对象在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;ilog(“在数组增量之后:+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