gpt4 book ai didi

javascript - 范围!! boolean 强制转换中的 (bang bang)

转载 作者:行者123 更新时间:2023-12-01 02:50:32 26 4
gpt4 key购买 nike

使用 !! 时出现奇怪的结果:

["a"].indexOf("b") === -1 // true
!!(["a"].indexOf("b") === -1) //true
!!["a"].indexOf("b") === -1 // false
!["a"].indexOf("b") === -1 //false

显然第一和第二个结果符合预期,但另外两个看起来很奇怪,对吧?我似乎找不到第二个和第三个语句不相等的原因,而且我当然无法理解第三个和第四个语句如何可能具有相同的 boolean 值。

我的猜测是 !!["a"] 在评估语句的其余部分之前被评估为 true ,但是为什么你不得到一个true.indexOf("b")TypeError??

也许我误解了运算符优先级的工作原理,但如果有人能够解释,我想了解这里发生的情况。

最佳答案

!!["a"].indexOf("b") === -1//false:

["a"].indexOf("b") 给出 -1,然后 !!-1 给出 true,它并不严格等于 -1,它给出 false。

!["a"].indexOf("b") === -1//false:

["a"].indexOf("b") 给出 -1,然后 !-1 给出 false,这并不严格等于 -1 给出 false。

这里值得注意的是,在数字上下文中,在这些比较中使用(通常除了比较两个字符串),true 是 1,false 是 0。因此,即使 == 也会给出两个错误。

另一个问题是precedence :

  1. 函数调用(["a"].indexOf("b"))
  2. 逻辑非(!)
  3. 严格平等 (===)

关于javascript - 范围!! boolean 强制转换中的 (bang bang),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999055/

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