在JavaScript中设置默认的可选值通常是通过使用||
字符完成的。
var Car = function(color) {
this.color = color || 'blue';
};
var myCar = new Car();
console.log(myCar.color); // 'blue'
var myOtherCar = new Car('yellow');
console.log(myOtherCar.color); // 'yellow'
这个方法有效是因为color
为undefined
,而undefined || String
总是返回String
。当然反过来也同样成立,String || undefined
会返回String
。当有两个Strings
时,第一个会被选中,例如'this' || 'that'
会返回'this'
。但是反过来不起作用,'that' || 'this'
会返回'that'
。
问题是:如何使用布尔值实现相同的效果?
看下面这个例子:
var Car = function(hasWheels) {
this.hasWheels = hasWheels || true;
}
var myCar = new Car();
console.log(myCar.hasWheels); // true
var myOtherCar = new Car(false)
console.log(myOtherCar.hasWheels); // ALSO true !!!!!!
对于myCar
,它起作用是因为undefined || true
为true
,但是正如您所看到的,它对于myOtherCar
不起作用,因为false || true
为true
。改变顺序也无济于事,因为true || false
仍然为true
。
因此,我是否遗漏了什么?或者以下是设置默认值的唯一方法?
this.hasWheels = (hasWheels === false) ? false: true
干杯!
||
;这只是从对非布尔值使用||
的惯例中带来的。我认为发布这个问题是因为||
没有达到所需的效果。 - Ted Hoppx = (x != false)
或者x ^= false
来达到同样的效果。 - minopret!=
和!==
之间差异的核心。不幸的是,JS没有^==
运算符。(顺便说一句,在Java这样的强类型语言中,“按位运算符适用于布尔值”并不正确。例如,有两个^
运算符:一个按位运算符适用于整数值,另一个逻辑运算符适用于布尔值。它们具有不同的语义。在像C这样不太强类型的语言中,情况就不同了,它实际上没有区分布尔值和整数值。) - Ted Hoppfalse
,所以我使用了this.hasWheels = hasWheels === true
。 - Ramtin Soltani