gpt4 book ai didi

javascript - 为什么 Number([]) 是 0 而 Number(![]) 也是 0?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:20:39 26 4
gpt4 key购买 nike

我正在深入研究 JavaScript,遇到了一些我试图理解的棘手行为。这只是学习目的,所以如果有人知道,请解释幕后发生的事情。

考虑以下输出以了解我的担忧!

console.log(Number([])) // 0
console.log(Number([1])) // 1

上面的输出是有意义的,因为 [] 是空白的,它会转换为 0,如果它有值,那么它会转换为它仅在第一个索引中保存的值。

console.log(Number(![])) // 0
console.log(Number(!0)) // 1 (not sure why)
console.log(Number([3,5])) // NaN (Not sure why)

以上三个输出让我发疯,因为我不明白那里发生了什么。谁能解释一下幕后发生的事情?

最佳答案

这是由于类型强制,在本例中是显式和隐式的。

Number([])

在第一个示例中,Array#toString() 方法在 [] 上被调用,结果是 ""。之后,空字符串被显式强制转换为数字,Number("") 为 0。

Number([1])

在第二个例子中发生了同样的事情,只是在最后有 Number("1")

Number(![])

在下面的示例中,您可以看到通常情况下,将空数组转换为 bool 值会导致 true,但由于 ! 会将强制转换为 bool 值,这会导致 false,然后将其显式强制转换为数字,使其为 0。此处,从未使用 toString() 方法。

Number(!0)

下一个例子非常简单,NOT 0,或者 !0 就是 true,转换为数字时就是 1 .

Number([3,5])

在最后一个例子中 NaN 被打印出来了,因为 [3,5].toString() 的结果是 3,5 ,这不是数字。

关于javascript - 为什么 Number([]) 是 0 而 Number(![]) 也是 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52217637/

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