取自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);
};
答案 0 :(得分:4)
ballSd.radius = rad || 10;
表示:如果rad == true
(或truthy
)返回rad值,否则返回10
答案 1 :(得分:2)
JavaScript中的布尔表达式不返回false
或true
†,而是返回第一个操作数(从左到右),用于确定表达式的结果。< / 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