如何在JavaScript中设置默认的布尔值?
在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
undefined || String
总是String
。 当然这也适用于String || undefined
String || undefined
是String
。 当两个Strings
出现时,第一个赢得'this' || 'that'
'this' || 'that'
是'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
undefined || true
true
但正如你所看到的,它不适用于myOtherCar
因为false || true
false || true
是true
。 改变顺序并没有帮助true || false
true || false
的依然true
。
因此,我在这里错过了什么,或者是以下唯一的方法来设置默认值?
this.hasWheels = (hasWheels === false) ? false: true
干杯!
你可以这样做:
this.hasWheels = hasWheels !== false;
除非hasWheels
明确为false
否则这hasWheels
您获得true
价值。 (其他的falsy值,包括null
和undefined
,将会导致true
,我认为是你想要的。)
怎么样:
this.hasWheels = (typeof hasWheels !== 'undefined') ? hasWheels : true;
您的其他选项是:
this.hasWheels = arguments.length > 0 ? hasWheels : true;
您可以使用ECMA6中的默认function参数function。 今天,ECMA6在浏览器中仍然不完全支持,但是您可以使用babel并立即开始使用新function。
所以,最初的例子会变得如此简单:
// 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
从张贴的答案有变化要注意。
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'
- 如果需要将其设置为布尔值false,则
value1
对于string“false”尤其由value0
制成。 我偶然发现这种放松有用。 -
value2
和value3
是原始发布答案的一致性修改,而不会改变结果。 -
value4
是巴贝尔如何编译默认参数。