【问题标题】:What does this mean?: x || x === {}这是什么意思?:x || x === {}
【发布时间】:2024-05-29 07:05:02
【问题描述】:

执行以下操作:

x || x === {}

不是说!!x,就是定义了x

【问题讨论】:

  • 由于{}是真实的,我看不出上面代码的意义......
  • 这不是骗子,因为比较。
  • @Baz:“他们”是谁?你实际上是在哪里看到的?还是您真的只是想问其他问题?
  • 我会很好奇发现它的原始上下文。看起来更像是一个非 JS 程序员在猜测语言是如何工作的,或者其他一些被歪曲的代码,比如x = x || {},这非常很常见。

标签: javascript


【解决方案1】:

这种比较没有意义,因为要么x 是真的,那么你得到x 的结果,或者是假的,你得到false(假值永远不会严格等于空对象实例)。

一个简洁的版本是

x || false

给我xfalse

【讨论】:

  • 你会在右侧得到错误,因为 x 作为参考与 {} 进行比较。 @Tomasz Lewowski 在下面也指出了这一点。
  • @RazvanDumitru 这就是她写false的原因
  • 当然可以,但是对于初学者来说,直接进入最终结果有点模棱两可。
  • 你是对的,但我想概括一下你的最后一句话:Nothing 永远严格等于空对象文字。
【解决方案2】:

x || x === {} 基本上是x || false

!!x 的意思是“是x 真实的”,所以它不完全相同 - 如果x 是真实的,x || x === {} 将返回 x。 在同样的情况下,!!x 将返回 true

|| 运算符的意思是“如果左侧是真实的(不是null,不是undefined,不是0 等 - 请参阅All falsey values in JavaScript 了解详情)返回左侧,否则返回右侧”。

在右侧你有x === {},它总是评估为false,因为严格比较意味着比较引用方式(即,“x{} 是同一个对象,这永远不会是真的)

!!xx || x === {} 只有在 x === truex === false 时才会相同

【讨论】:

    【解决方案3】:

    || 如果 LHS 为真值,则返回左侧。因此,如果x 为真值,则返回x

    否则,它将x 与一个新对象(始终为false)进行比较,然后返回。

    因此,如果 x 为真,您将获得(未修改的)x,否则您将获得显式布尔值 false

    这与!!x 不同,因为如果x 是一个真值,它将返回一个布尔值true

    【讨论】: