我很好奇为什么在使用 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"
当您使用 arr.length-- 减少 arr.length 属性时,它会通过从其值中减去 1 来修改数组的 length 属性,并且数组会相应地被截断。这意味着数组的最后一个元素被删除,数组现在短了一个元素。
另一方面,当您使用 arr.length - 1 时,它不会修改数组的长度属性。相反,它返回一个比数组当前长度小 1 的新值,但实际上并没有从数组中删除任何元素。
因此,如果您使用 arr.length--,数组将被修改并且其长度将减少一个,这意味着最后一个元素将被删除。如果您要使用 arr.length - 1,您将只获取最后一个元素的索引而无需修改数组本身。
试试这个:
console.log(numbers)
你会看到每次循环,
numbers
数组都会丢失最后一个值。在 JavaScript 中,数组长度是可变的。您基本上可以通过执行 array.length = 0
. 删除数组中的每个元素
--
是自减运算符,它不仅将1
的值减去numbers.length
,还将numbers.length
的值设置为numbers.length - 1
。
如果要正确控制for循环,就要一直使用
i < numbers.length - 1
,否则每次循环,你实际上是在删除数组的最后一个元素。