在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
,因此更改订单无效。
因此,我在这里遗漏了什么或者以下是设置默认值的唯一方法吗?
{{1}}
干杯!
答案 0 :(得分:113)
你可以这样做:
this.hasWheels = hasWheels !== false;
除非true
明确hasWheels
,否则会获得false
值。 (其他虚假值,包括null
和undefined
,会产生true
,我认为这就是您想要的。)
答案 1 :(得分:6)
怎么样:
this.hasWheels = (typeof hasWheels !== 'undefined') ? hasWheels : true;
您的另一个选择是:
this.hasWheels = arguments.length > 0 ? hasWheels : true;
答案 2 :(得分:3)
您可以使用ECMA6中的Default function parameters功能。今天,浏览器仍未完全支持ECMA6,但您可以使用babel并立即开始使用新功能。
因此,原始示例将变得如此简单:
// specify default value for the hasWheels parameter
var Car = function(hasWheels = true) {
this.hasWheels = hasWheels;
}
var myCar = new Car();
console.log(myCar.hasWheels); // true
var myOtherCar = new Car(false)
console.log(myOtherCar.hasWheels); // false
答案 3 :(得分:3)
从发布的答案中可以注意到各种变化。
var Var = function( value ) {
this.value0 = value !== false;
this.value1 = value !== false && value !== 'false';
this.value2 = arguments.length <= 0 ? true : arguments[0];
this.value3 = arguments[0] === undefined ? true : arguments[0];
this.value4 = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
};
value0 value1 value2 value3 value4
---------------------------------------------------------------------------
Var("") true true true true true
Var("''") true true '' '' ''
Var("0") true true 0 0 0
Var("'0'") true true '0' '0' '0'
Var("NaN") true true NaN NaN NaN
Var("'NaN'") true true 'NaN' 'NaN' 'NaN'
Var("null") true true null null null
Var("'null'") true true 'null' 'null' 'null'
Var("undefined") true true undefined true true
Var("'undefined'") true true 'undefined' 'undefined' 'undefined'
Var("true") true true true true true
Var("'true'") true true 'true' 'true' 'true'
Var("false") false false false false false
Var("'false'") true false 'false' 'false' 'false'
value1
特别是来自value0
的字符串'false',如果需要它为布尔值false。我觉得这种放松很有用。value2
和value3
是原始发布的答案的修改,以保持一致性,但不会更改结果。value4
是Babel如何编译默认参数。答案 4 :(得分:1)
无需过多混淆,您可以这样做以获得默认的true。
this.hasWheels=typeof hasWheels === 'boolean'?hasWheels:true
要获取默认的错误
this.hasWheels=typeof hasWheels === 'boolean'?false