【问题标题】:Difference between || and ?? operators [duplicate]|| 之间的区别和 ??运营商 [重复]
【发布时间】:2021-06-27 04:37:11
【问题描述】:

JS中??||有什么区别

const a = {}

const b = a.name ?? 'varun 1'

console.log(b)

const d = a.name || 'varun 2'

console.log(d)

在上面的代码中,它们的工作方式相同。我知道 || 是 OR 即如果第一个语句是 false 然后设置下一个的值。 ??也一样吗?

【问题讨论】:

标签: javascript


【解决方案1】:

主要区别在于nullish coalescing(??) 运算符仅在左操作数为nullundefined 时才会将结果作为右操作数。

OR(||) 运算符将结果作为左操作数的所有假值的右操作数。

以下是一些例子

  • 片段 1:使用 0 作为输入

const a = 0;
// a || 10 --> Will result in 10, as || operator considers 0 as falsy value and resulting the right side operand
console.log(`a || 10 = ${a || 10}`);
// a ?? 10 --> Will result in 0, as ?? operator considers 0 as truthy value and resulting the left side operand
console.log(`a ?? 10 = ${a ?? 10}`);
  • 片段 2:以 '' 作为输入

const a = ''
console.log(`a || "ABC" = ${a || "ABC"}`); // ABC
console.log(`a ?? "ABC" = ${a ?? "ABC"}`); // ''
  • 片段 3:使用 null 作为输入

const a = null;
console.log(`a || 10 = ${a || 10}`); // 10
console.log(`a ?? 10 = ${a ?? 10}`); // 10
  • 片段 4:使用 undefined 作为输入

const a = {}
// Here a.name will be undefined, hence both of the operands results the right side operand
console.log(`a.name ?? 'varun 1' = ${a.name ?? 'varun 1'}`); // 'varun 1'
console.log(`a.name || 'varun 2' = ${a.name || 'varun 2'}`); // 'varun 2'

const a = {name: ''}
// Here a.name will be '', then

// ?? will result ''
console.log(`a.name ?? 'varun 1' = ${a.name ?? 'varun 1'}`);
// || will result in 'varun 2'
console.log(`a.name || 'varun 2' = ${a.name || 'varun 2'}`);
  • 片段 5:使用 false 作为输入

const a = false;
console.log(`a || 10 = ${a || 10}`); // 10
console.log(`a ?? 10 = ${a ?? 10}`); // false

如上所述,当输入为nullundefined 时,这两个运算符的行为相似。当我们提供falsy 值(例如0''falseNaN)时,我们将看到真正的区别。

【讨论】:

    【解决方案2】:

    你可以看到差异

    const a = ''
    
    const b = a ?? 'varun 1'
    
    console.log(b)
    
    const d = a || 'varun 2'
    
    console.log(d)

    因为 a ?? 'varun 1' 仅在 a 为 null 或未定义时返回 'varun 1',但如果 a 为假,a || 'varun 2' 返回 'varun 2'。一些假值是空字符串、零和布尔假。

    【讨论】:

      猜你喜欢
      • 2018-06-07
      • 1970-01-01
      • 2010-09-07
      • 2010-12-26
      • 2010-12-30
      • 1970-01-01
      • 2014-08-16
      • 2011-04-08
      • 2012-11-24
      相关资源
      最近更新 更多