逻辑运算符 || 在javascript中,0代表布尔假?

IT技术 javascript boolean logical-operators or-operator
2021-01-21 17:50:31

我碰巧知道以下代码

这是代码,非常简单:

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

那么控制台中的输出是-1

不知何故,我对javascript真的很陌生,

我想到的是0代表JS 中的Boolean False,因此||运算符似乎忽略了 0 并将值 -1 分配给变量

那我说得对吗?我只想确认

2个回答
  • ||expr1 || expr2 (逻辑或)

    如果可以转换为 true,则返回 expr1;否则,返回 expr2。因此,当与布尔值一起使用时, || 如果任一操作数为真,则返回真;如果两者都为假,则返回假..

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

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

Javascript 中的所有值要么是“真”,要么是“假”。
以下值在条件语句中等效于 false

  • 错误的
  • 空值
  • 不明确的
  • 空字符串""(\ '')
  • 数字 0
  • 数字 NaN

所有其他值都等价于 true。


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

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


MDN 上的逻辑运算符

@Fuhrmanator 是的,这是正确的。|| 和 && 不(必须)返回布尔值。它们可以更好地描述为操作数选择器运算符。在 || 的情况下 如果第一个操作数可以被强制为真,则返回第一个操作数,否则返回第二个操作数。&& 具有相反的行为。
2021-04-04 17:50:31
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}}}-- 所以,我猜如果第一个值是“真实的”(定义),它会分配第一个值,否则第二个值是默认值?
2021-04-12 17:50:31

您可以使用Nullish 合并运算符 (??)

空合并运算符 (??) 是一个逻辑运算符,当其左侧操作数为空或未定义时返回其右侧操作数,否则返回其左侧操作数。

只有 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: ""