"x = x || 0"的目的是什么?

Vas*_*asu 9 javascript

在查看我在网上找到的一些代码时,我发现了这个特殊的代码行(Javascript):

function values(b) {
    this.b = b || 0;
}
Run Code Online (Sandbox Code Playgroud)

我根本想不出来的目的是什么||0.如果我没有弄错,因为||返回一个布尔值,这个值b将始终是参数的布尔等效值.如果b传递为真(即1true),那么b应该是真的; 否则,使用其中一个false值(即.NaN,0),这应该是假的.然后我解释如下:

btrue:

this.b = true || false; // will evaluate to true
Run Code Online (Sandbox Code Playgroud)

bfalse:

this.b = false || false; // will evaluate to false
Run Code Online (Sandbox Code Playgroud)

我只是没有看到通过添加获得的价值||0.有人可以向我解释一下吗?

Bra*_*don 16

||在变量赋值中是指定默认值的常用方法.这是因为JavaScript的虚假值.在JavaScript中undefined,null空字符串,0所有计算为false在布尔上下文.

例如:

var blah = undefined;
if (blah) {
    console.log('got it!');
}
else {
    console.log('not true!');  // this one outputs
}
Run Code Online (Sandbox Code Playgroud)

||在赋值中使用是一种说法"如果已定义,则使用此".

对于此代码,

function values(b) {
    this.b = b || 0;
}
Run Code Online (Sandbox Code Playgroud)

我们可以使用真值表:

b          this.b
------------------
5          5
10         10
0          0
undefined  0
null       0
''         0
Run Code Online (Sandbox Code Playgroud)

真正感兴趣的价值是undefinednull.所以我们真正想要的是:

if (b !== undefined && b !== null) {
    this.b = b;
}
else {
    this.b = 0;
}
Run Code Online (Sandbox Code Playgroud)

this.b = b || 0要写得更短.

  • 还要注意,即使`b`为`0`或`false`也会发生这种情况。 (2认同)