我正在使用一个大型JS库在canvas中执行某些绘图操作.检查库代码(为了适应变化),我遇到了'||' 运算符以一种当然不应该评估为布尔值的方式使用.这是否意味着这是一个不同的运营商,还是我错过了一些明显的东西?一个例子如下:
var $time = Date.now || function(){
return +new Date;
};
Run Code Online (Sandbox Code Playgroud)
Tim*_*the 17
已经有一个已接受的答案,但我想提一下,OR运算符也称为Default-Operator,因为它不返回布尔值,而是返回左手或右手参数.
AND-Operator也是如此,它也被称为guard-Operator.
查看crockford的JavaScript编程语言调查了解更多详情:
&&运算符通常称为逻辑和.它也可以称为守卫.如果第一个操作数为false,null,undefined,""(空字符串)或数字0则返回第一个操作数.否则,它返回第二个操作数.这提供了一种编写null检查的便捷方法:
var value = p && p.name;/*如果p具有值,则仅从p检索名称值,从而避免错误.*/
|| 运算符通常称为逻辑或.它也可以称为默认值.如果第一个操作数为false,null,undefined,""(空字符串)或数字0,则返回第二个操作数.否则,它返回第一个操作数.这提供了一种指定默认值的便捷方法:
value = v || 10;/*使用v的值,但如果v没有值,请改用10.*/