JavaScript:使用“--”与“- 1”递减 for 循环的 arr.length 的区别

问题描述 投票:0回答:2

我很好奇为什么在使用 arr.length-- 和 arr.length - 1 递减 arr.length 时会得到两个不同的结果。我本以为它们的功能是一样的。例如:

const numbers = [10, 20, 40, 30, 50]

function solution(numbers) {
        for (let i = 0; i < numbers.length - 1; i++) {
        if (numbers[i] < numbers[i + 1]) {
          console.log('TRUE: ' + numbers[i]+" is increasing to "+ numbers[i+1])
       } else {
         return console.log('FALSE: ' + numbers[i] +' is decreasing to ' + numbers[i+1])
       }
    }
}

注销为:

"TRUE: 10 is increasing to 20"
"TRUE: 20 is increasing to 40"
"FALSE: 40 is decreasing to 30"

但是当我交换减量时:

(let i = 0; i < numbers.length--; i++)

else 返回 undefined

"TRUE: 10 is increasing to 20"
"TRUE: 20 is increasing to 40"
"FALSE: undefined is decreasing to undefined"
javascript arrays for-loop return decrement
2个回答
1
投票

当您使用 arr.length-- 减少 arr.length 属性时,它会通过从其值中减去 1 来修改数组的 length 属性,并且数组会相应地被截断。这意味着数组的最后一个元素被删除,数组现在短了一个元素。

另一方面,当您使用 arr.length - 1 时,它不会修改数组的长度属性。相反,它返回一个比数组当前长度小 1 的新值,但实际上并没有从数组中删除任何元素。

因此,如果您使用 arr.length--,数组将被修改并且其长度将减少一个,这意味着最后一个元素将被删除。如果您要使用 arr.length - 1,您将只获取最后一个元素的索引而无需修改数组本身。


0
投票

试试这个:

console.log(numbers)

你会看到每次循环,

numbers
数组都会丢失最后一个值。在 JavaScript 中,数组长度是可变的。您基本上可以通过执行
array.length = 0
.

删除数组中的每个元素

--
是自减运算符,它不仅将
1
的值减去
numbers.length
,还将
numbers.length
的值设置为
numbers.length - 1

如果要正确控制for循环,就要一直使用

i < numbers.length - 1
,否则每次循环,你实际上是在删除数组的最后一个元素。

© www.soinside.com 2019 - 2024. All rights reserved.