如何在JavaScript中设置默认布尔值?

时间:2013-03-17 17:57:26

标签: javascript boolean

在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始终是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它可行,因为truemyOtherCar,但您可以看到它不适用于false || true,因为truetrue || false 。由于true仍为this.hasWheels = (hasWheels === false) ? false: true ,因此更改订单无效。

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

{{1}}

干杯!

5 个答案:

答案 0 :(得分:113)

你可以这样做:

this.hasWheels = hasWheels !== false;

除非true明确hasWheels,否则会获得false值。 (其他虚假值,包括nullundefined,会产生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。我觉得这种放松很有用。
  • value2value3是原始发布的答案的修改,以保持一致性,但不会更改结果。
  • value4是Babel如何编译默认参数。

答案 4 :(得分:1)

无需过多混淆,您可以这样做以获得默认的true。

this.hasWheels=typeof hasWheels === 'boolean'?hasWheels:true

要获取默认的错误

this.hasWheels=typeof hasWheels === 'boolean'?false