我正在使用一个大型 JS 库在画布中执行某些绘图操作。查看库代码(以进行适应更改),我遇到了“||” 运算符的使用方式当然不应计算为布尔值。这是否意味着这是一个不同的运营商,还是我遗漏了一些明显的东西?一个例子如下:
var $time = Date.now || function(){
return +new Date;
};
我正在使用一个大型 JS 库在画布中执行某些绘图操作。查看库代码(以进行适应更改),我遇到了“||” 运算符的使用方式当然不应计算为布尔值。这是否意味着这是一个不同的运营商,还是我遗漏了一些明显的东西?一个例子如下:
var $time = Date.now || function(){
return +new Date;
};
已经有一个公认的答案,但我想提一下,OR-Operator 也称为 Default-Operator,因为它不返回布尔值,而是返回左侧或右侧参数。
AND-Operator 也是如此,它也被称为guard-Operator。
查看crockford 的 JavaScript 编程语言调查了解更多详情:
&& 运算符通常称为逻辑与。也可称为守卫。如果第一个操作数为 false、null、undefined、""(空字符串)或数字 0,则它返回第一个操作数。否则,它返回第二个操作数。这提供了一种编写空检查的便捷方法:
var value = p && p.name; /* 如果 p 有值,则只会从 p 中检索 name 值,避免错误。*/
|| 运算符通常称为逻辑或。它也可以称为默认值。如果第一个操作数为 false、null、undefined、""(空字符串)或数字 0,则返回第二个操作数。否则,它返回第一个操作数。这提供了一种指定默认值的便捷方法:
值 = v || 10; /* 使用 v 的值,但如果 v 没有值,则使用 10 代替。*/
该||
运营商的计算结果为第一个操作数,如果它可以转换为true或最后一个操作数,否则。因此,在您的示例$time
中,Date.now
如果它存在或声明的函数不存在。
我相信代码是说如果DateTime.now
变量不存在,而是返回+new Date
.
这是很常见的javascript。如果 Data.now 评估为真,则 $time 设置为该值,否则设置为该函数。
该||
运算符用于$time
在示例中为其分配值。
如果Date.now
计算结果为 false,则$time
分配||
运算符右侧的值(在本例中为函数)。如果Date.now
评估为真,则它短路并将 Date.now 的值分配给$time