【问题标题】:If [] is falsy, how come ![] is also falsy [duplicate]如果 [] 是假的,怎么来 ![] 也是假的 [重复]
【发布时间】:2019-12-30 06:16:39
【问题描述】:

我们知道在 JS 中 [] == false 返回 true。但今天我在观看凯尔辛普森的视频演示时,我看到了这个:

[] == ![]   // true

![] 怎么也是假的。按照我的逻辑,应该是true

【问题讨论】:

  • [] 不是假的...
  • 那为什么[] == false 是真的?我错过了什么。
  • @RajatSaxena 因为[] 被强制转换为"",然后转换为0,而false 被转换为0,而0 === 0 被转换为true。与false 的抽象比较告诉你某事是否是虚假的。 !![] 会。
  • 哦!似乎我从一些不好的来源中学到了这个概念。无论如何,我也找到了深入的解释:stackoverflow.com/a/33567406/942589
  • @RajatSaxena 似乎我的评论已被您链接的答案及其相关问题所涵盖。

标签: javascript


【解决方案1】:

== 允许强制。也一样!操作员。所以 [] == ![] 变成 "" == false 这是真的。此外 ![] 是真的,因为 [] 是一个真实值的对象。否定它会产生错误。

【讨论】:

    【解决方案2】:

    在 Javascript 中,not 运算符 (!) 检查类似 !(true) 的非条件,这里首先检查 () 的内部部分,如果返回 true,则实际输出变为 false(true) => !(true) =>false (false)=>!(false)=>true`

    回到原来的问题 [] return true where as ![] return false 当您与 === 严格比较时,它检查 typevalue 两者。

     console.log([]); // true
     console.log(![]); // false
     console.log([] == ![]) // true
     console.log([] ===![]) // false
    
     

    注意如果您一直想要boolean 值,那么您可以使用!!

     console.log(!![]); // true
     console.log(!!(1 === 1)); // true
    
     

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2012-04-24
      • 2011-05-12
      相关资源
      最近更新 更多