【问题标题】:Why does the OR operator behave like this in Javascript? [duplicate]为什么 OR 运算符在 Javascript 中的行为是这样的? [复制]
【发布时间】:2019-11-27 12:45:16
【问题描述】:

我一直使用|| 作为无效的合并类型的运算符。 AB

但如果我做类似的事情,

1  const a = null
2  const b = '123'
3
4  console.log(a || b) // 123
5  console.log(a) || console.log(b) // null, 123

为什么两个控制台日志都在第 5 行执行?就算a === null,不应该只执行第一个控制台日志,不看console.log(b)吗?

【问题讨论】:

  • 为什么不应该执行第二个console.log?!
  • 因为它是左侧或右侧.. 不是两者都
  • @MikeK — 整个表达式评估为 LHS 或 RHS 的值。仍然需要对代码进行评估以找出它应该是哪一个。
  • 它必须评估双方*才能返回结果……(*如果 LHS 表达式是假的……)
  • 是的。函数调用的计算结果是函数返回的任何值。 console.log 不返回任何东西,因为,它为什么要返回,有什么可以返回的?

标签: javascript


【解决方案1】:
  1. 评估左侧。
  2. console.log(a) 返回undefined(因为该函数总是返回undefined
  3. 由于 LHS 被评估为虚假值:评估右侧。

a 的值无关紧要,因为这不是 LHS 上的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2012-12-29
    • 2019-07-01
    • 2011-05-30
    相关资源
    最近更新 更多