Javascript逻辑OR和对象

时间:2015-05-22 03:26:17

标签: javascript object logical-operators

有人可以解释在这样的声明中发生的所有事情:

POJO.someProperty = POJO.someProperty || {}

这是否检查未定义然后只是在undefined = true时分配一个空对象?

3 个答案:

答案 0 :(得分:1)

此语句正在检查POJO.someProperty是否具有真值。如果确实如此,则没有任何反应。如果属性是假的,则为属性分配一个空对象文字。

Falsy意味着以下几点之一:

  1. false字面
  2. 数字0
  3. null
  4. undefined
  5. 空字符串
  6. 如果属性具有任何这些值,则会将其重新分配给空对象。

答案 1 :(得分:1)

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

  

逻辑运算符通常与布尔(逻辑)值一起使用。   如果是,则返回布尔值。然而,&&和||   运算符实际上返回一个指定操作数的值,   因此,如果这些运算符与非布尔值一起使用,它们可能会   返回非布尔值。

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

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

为什么使用它,它通常用于转义属性未定义的错误。假设您尝试访问someProperty的属性,例如POJO.someProperty,但如果POJO.someProperty.somekey未定义,则会出现错误。但是如果它未定义,那么我们将分配一个空对象,以便POJO.someProperty将返回undefined而不是错误。

答案 2 :(得分:0)

在JavaScript中,与C一样,赋值表达式的值是右侧操作数的值。在您提供的示例中,在赋值发生之前评估赋值右侧的表达式。因为它是一个逻辑OR,如果{}是假的,它将评估为对象文字POJO.someProperty

你可能会在其他地方看到这样使用的赋值表达式(注意if表达式中的单个等号):

var x = 1;
var y = 0;
if (y = x) {
    // This block executes because x is 1 (also, y is now 1)
}