gpt4 book ai didi

javascript - 数组项的长度应该是未定义的,但是在调试器中它有一个值

转载 作者:行者123 更新时间:2023-12-02 09:04:14 25 4
gpt4 key购买 nike

这是将数组分割为较小块的解决方案。该解决方案在数组项上使用长度属性,这对我来说没有意义,因为它应该是未定义的;但是,该解决方案确实有效,当我使用调试器在 chrome 开发工具中将其作为片段运行时,它确实显示了一个值,我只是不确定它是如何工作的。我无法解释为什么 last.length有任何值(value)。有人可以解释为什么这行得通,为什么我不能 console.log 一个值吗?

const chunk = (arr, size) => {
let newArr = []
for (let el of arr) {
let last = newArr[newArr.length -1]
console.log(last, 'i am last')
if(!last || last.length === size) {
newArr.push([el])
} else {
last.push(el)
}
}
return newArr
}

// chunk([1, 2, 3, 4, 5], 2) --> [[ 1, 2], [3, 4], [5]]

最佳答案

TLDR:当 last未定义,此表达式

(!last || last.length === size)

仍然评估为真。请阅读以获得更多详情。

在循环的第一次迭代中,此分配发生:
let last = newArr[-1];

因此,last 被分配 undefined作为一个值。

随后的声明:
if(!last || last.length === size) {
!last计算结果为真,因为这就是 !undefined评估为。

由于 !last是真的, last.length根本不评价。因此,不会引发异常,因为没有实际尝试评估本质上是什么 undefined.length这是最流行的编程语言的一个特性,称为 。 bool 短路 .一旦 OR 表达式的第一部分计算为真,它右边的任何内容都不会被计算。当左表达式的计算结果为 false 时,相同的原则适用于 AND 语句。

这会触发下一行:
newArr.push([el])

这给了数组一个有效的元素。因此 newArr.size现在是 1。

在循环的后续迭代中,last 被正确分配为 newArr 中的最后一个元素。 .

关于javascript - 数组项的长度应该是未定义的,但是在调试器中它有一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60334526/

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