有人可以解释一下这样的声明中发生的一切吗:
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/