Javascript 逻辑 OR 和对象

标签 javascript object logical-operators

有人可以解释一下这样的声明中发生的一切吗:

POJO.someProperty = POJO.someProperty || {}

这是检查未定义然后简单地分配一个空对象(如果未定义= true)吗?

最佳答案

logical operators在javasript中可以返回非 bool 值。 Logical OR运算符将返回第一个 truthy它在操作数中找到的值。逻辑 AND 将返回第一个 falsy值,或最后一个操作数(如果所有其他操作数均为 truhty) .

Logical operators are typically used with Boolean (logical) values. When they are, they return a Boolean value. However, the && and || operators actually return the value of one of the specified operands, so if these operators are used with non-Boolean values, they may return a non-Boolean value.

  • 1 || 0 -> 1
  • 1 && '' -> ''

因此,当您的代码被评估时,如果POJO.someProperty未定义,那么该运算符将处理第二个运算符,它是一个空对象(这是一个真值),以便返回并分配该值返回someProperty

为什么用它,正常情况下是用来逃避属性未定义的错误。假设您正在尝试访问 POJO.someProperty 的属性,例如 POJO.someProperty.somekey 但如果 POJO.someProperty 未定义,那么您会得到一个错误。但在这里,如果它是未定义的,那么我们将分配一个空对象,因此 POJO.someProperty.somekey 将返回未定义而不是错误。

关于Javascript 逻辑 OR 和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30387869/

相关文章:

mysql - `MySQL` 如何在 `WHERE` 子句中定义顺序?

Python And Or 语句的行为..很奇怪

javascript - 使用正则表达式从 JavaScript 中的字符串生成缩写?

javascript - 使用 JavaScript 进行解析

javascript - jQuery 对象字面量函数声明错误

java - 对象实例化另一个对象?

javascript - 比较 : Resizing ArrayBuffer with buffer views (Uint8 vs Float64), 我错过了什么吗?

javascript - 如何从 WKWebView Swift 调用这个 javascript 函数?

java - 我如何调用这个 Ffun() 并访问这个类?