??和||在 JS 中有什么区别
const a = {}
const b = a.name ?? 'varun 1'
console.log(b)
const d = a.name || 'varun 2'
console.log(d)Run Code Online (Sandbox Code Playgroud)
在上面的代码中,它们的工作方式相同。我知道||是 OR 即如果第一个语句false然后设置下一个的值。是一样的??吗?
小智 6
你可以看到差异
const a = ''
const b = a ?? 'varun 1'
console.log(b)
const d = a || 'varun 2'
console.log(d)Run Code Online (Sandbox Code Playgroud)
因为仅当为 null 或未定义时才a ?? 'varun 1'返回,但如果为假则返回。一些假值是空字符串、零和布尔值 false。'varun 1'aa || 'varun 2''varun 2'a
主要区别在于,nullish coalescing(??)仅当左操作数是null或 时,运算符才会将结果作为右操作数给出undefined。
而OR (||)运算符会将结果作为左操作数的所有假值的右操作数。
下面是一些例子
0作为输入const a = 0;
//a || 10 --> Will result in 10, as || operator considers it as falsy value and resulting the right side operand
console.log(`a || 10 = ${a || 10}`);
//a ?? 10 --> Will result in 0, as ?? operator consider it as truthy value and resulting the left side operand
console.log(`a ?? 10 = ${a ?? 10}`);Run Code Online (Sandbox Code Playgroud)
''作为输入const a = ''
console.log(`a || "ABC" = ${a || "ABC"}`);
console.log(`a ?? "ABC" = ${a ?? "ABC"}`);Run Code Online (Sandbox Code Playgroud)
null作为输入const a = null;
console.log(`a || 10 = ${a || 10}`);
console.log(`a ?? 10 = ${a ?? 10}`);Run Code Online (Sandbox Code Playgroud)
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'}`);
console.log(`a.name || 'varun 2' = ${a.name || 'varun 2'}`);Run Code Online (Sandbox Code Playgroud)
const a = {name: ''}
//As, 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'}`);Run Code Online (Sandbox Code Playgroud)
false作为输入const a = false;
console.log(`a || 10 = ${a || 10}`);
console.log(`a ?? 10 = ${a ?? 10}`);Run Code Online (Sandbox Code Playgroud)
如上所述,当输入为null或时,两个运算符的行为相似undefined。当我们提供falsy诸如0, '', false, 之类的值时,我们将看到真正的区别NaN。
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |