在下面的javascript函数中有什么||操作员呢?

时间:2011-03-03 08:35:01

标签: javascript box2d

取自box2djs样本。

我正在尝试理解该库,但我不理解这一行:

    ballSd.radius = rad || 10;
这是什么意思?

这是完整的定义

createBall2 = function(world, x, y, rad, fixed) {
    var ballSd = new b2CircleDef();
    if (!fixed) ballSd.density = 1.0;

    // what does the next line do?
    ballSd.radius = rad || 10;

    ballSd.restitution = 0.2;
    var ballBd = new b2BodyDef();
    ballBd.AddShape(ballSd);
    ballBd.position.Set(x,y);
    return world.CreateBody(ballBd);
};

6 个答案:

答案 0 :(得分:4)

ballSd.radius = rad || 10; 

表示:如果rad == true(或truthy)返回rad值,否则返回10

答案 1 :(得分:2)

JavaScript中的布尔表达式不返回falsetrue ,而是返回第一个操作数(从左到右),用于确定表达式的结果。< / p>

使用逻辑OR ||时,这是第一个计算结果为true的操作数(类似于false计算为&&的第一个操作数。)

正如其他人已经指出的那样,如果rad评估为false(例如,如果它是0),则会返回第二个操作数。

此“技巧”通常用于设置默认值。

Read more about logical operators.


†:只有66.6%正确。 NOT运算符!将始终返回一个布尔值。

答案 2 :(得分:1)

所有答案都是正确的,但他们缺少对JavaScript中&&||运算符的解释。诀窍是它们不返回布尔值,它们返回比较短路的值。

例如

// Returns the first truthy value (2) since after looking at 0 and 2, we already
// know the expression is true and we don't need to evaluate the last component (3)
alert (0 || 2 || 3) 

// Returns the first falsy value (""), the comparison doesn't even
// evaluate "Hello" and "Dog"
alert( "" && "Hello" &&  "Dog" );

// No short circuiting, so the last value ("fun") is returned
alert( "string" && "fun" )

答案 3 :(得分:0)

如果rad为false或0,则将ballSd.radius设置为10

答案 4 :(得分:0)

将圆半径设置为给定参数“rad”(如果已给定)并且大于零,否则设置为10,这使其成为默认半径。

答案 5 :(得分:0)

参见this ...所以如果转换为布尔值的rad变量的值为true,则返回rad,否则返回10; 任何变量都可以转换为布尔值: null,0,undefined将转换为false; 未定义的将被转换为true; 见implicit boolean conversions in javascript