JavaScript中的逻辑运算符||,0代表布尔值false?

10

我碰巧知道以下代码:

这是代码,非常简单:

var test = 0 || -1 ;
console.log(test);

如果在控制台中输出为-1

我对JavaScript还很陌生,我的理解是在JS中0代表布尔值False,因此||运算符似乎会忽略0并将值-1分配给变量。

那么我的理解正确吗?我只是想确认一下。

2个回答

18
  • ||expr1 || expr2 (逻辑或)

    如果expr1可以转换为true,则返回expr1;否则返回expr2。因此,当用于布尔值时,|| 如果任一操作数为true,则返回true;如果两个操作数都为false,则返回false。

  • &&expr1 && expr2 (逻辑与)

    如果expr1可以转换为false,则返回expr1;否则返回expr2。因此,当用于布尔值时,&& 如果两个操作数都为true,则返回true;否则返回false。

Javascript中的所有值都是真值(truthy)或假值(falsy)。
以下值在条件语句中等价于false:

  • false
  • null
  • undefined
  • 空字符串"" (\ ''
  • 数字0
  • 数字NaN

所有其他值都等价于true。


所以... var test = 0 || -1 ; 返回 -1

如果是 var test = 0 || false || undefined || "" || 2 || -1,它将返回 2


MDN中的逻辑运算符


Practical Node.js中有以下代码:var user =function (ops) { return { firstName: ops.name || 'John', lastName: ops.name || 'Doe', email: ops.email || 'test@test.com', name:function () {return this .firstName +this .lastName}}}--所以,我猜它会分配第一个值,如果它们是“真实的”(已定义),否则第二个值是默认值? - Fuhrmanator
@Fuhrmanator 是的,那是正确的。|| 和 && 不一定返回布尔值。它们可以更好地描述为操作数选择器运算符。在 || 的情况下,如果第一个操作数可以强制转换为 true,则返回第一个操作数,否则返回第二个操作数。 && 具有相反的行为。 - Aditya Prasoon

3
您可以使用空值合并运算符(??)
空值合并运算符(??)是一个逻辑运算符,当其左侧操作数为null或undefined时返回其右侧操作数,否则返回其左侧操作数。
只有null和undefined将被视为假值。0将被视为真值。但要注意:空字符串也将被视为真值!

console.log('0 ?? 1  ->', 0 ?? 1) // expected output: 0
console.log('null ?? 1  -> ', null ?? 1) // expected output: 1
console.log('undefined ?? 1  ->', undefined ?? 1) // expected output: 1
console.log('"" ?? 1  ->', "" ?? 1) // expected output: ""


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接