逻辑或通常用在函数体内,用于给参数设值默认值。
代码示例
constructor(x, y){
this.x = x || 0
this.y = y || 0
}
js代码中遇到这样的写法,看代码能大致猜到是设值默认值,但不明白其中的原理。然后上网查了一下,确实是设值默认值,但对其原理并没有详细的说明,然后自己去看了《Javascript权威指南》运算符这一章,里面果然有详细的说明,看完之后如醍醐灌顶。。。。。。
代码中的意思是:如果x的布尔值为true,则把x的值赋值给this.x。否则把0赋值给this.x。
在 js 中,会转换为 false 的值有false、undefined、null、0、NaN、""、’’ 等
以下是书中对逻辑或( || )的详细说明:
“||”运算符对两个操作数做布尔或(OR)运算。如果其中一个或者两个操作数是真值,它返回一个真值。如果两个操作数都是假值,它返回一个假值。
尽管“||”运算符大多数情况下只做简单布尔或(OR)运算,和“&&”一样,它也具有一些更复杂的行为。它会首先计算第一个操作数的值,也就是说会首先计算左侧的表达式。如果计算结果为真值,那么返回这个真值。否则,再计算第二个操作数的值,即计算右侧的表达式,并返回这个表达式的计算结果。
和“&&”运算符一样,同样应该避免有操作数包含一些具有副作用的表达式,除非你目的明确的在右侧使用带副作用的表达式,而有可能不会计算右侧的表达式。
这个运算符最常用的方式是用哪个类从一组备选表达式中选出第一个真值表达式:
// 如果max_width已经定义了,直接使用它;否则在preferences对象中查找max_width
// 如果没有定义它,则使用一个写死的常量
var max = max_width || preferences.max_width || 500;
这种惯用法通常用在函数体内,用来给参数提供默认值:
// 将o的成员属性复制到p中,并返回p
function copy(o, p) {
p = p || {}; // 如果想参数p没有传入任何对象,则使用一个新创建的对象
// 函数体内的主逻辑
}
参考来源:
Javascript权威指南第六版