如何在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' 

这是有效的,因为colorundefinedundefined || String undefined || String总是String 。 当然这也适用于String || undefined String || undefinedString 。 当两个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 || truetrue 。 改变顺序并没有帮助true || false true || false的依然true

因此,我在这里错过了什么,或者是以下唯一的方法来设置默认值?

 this.hasWheels = (hasWheels === false) ? false: true 

干杯!

你可以这样做:

 this.hasWheels = hasWheels !== false; 

除非hasWheels明确为false否则这hasWheels您获得true价值。 (其他的falsy值,包括nullundefined ,将会导致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制成。 我偶然发现这种放松有用。
  • value2value3是原始发布答案的一致性修改,而不会改变结果。
  • value4是巴贝尔如何编译默认参数。