64

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

之所以有效,是因为colorundefined并且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 || trueistrue但正如您所见,它不适用于myOtherCar因为false || trueis truetrue || false改变顺序仍然没有帮助true

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

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

干杯!

4

5 回答 5

137

你可以这样做:

this.hasWheels = hasWheels !== false;

这会给你一个true值,除非hasWheels是显式的false。(其他虚假值,包括nulland undefined,将导致true,我认为这是你想要的。)

于 2013-03-17T18:01:15.980 回答
6

怎么样:

this.hasWheels = (typeof hasWheels !== 'undefined') ? hasWheels : true;

您的另一个选择是:

this.hasWheels = arguments.length > 0 ? hasWheels : true;
于 2013-03-17T18:00:40.830 回答
5

从发布的答案中需要注意一些变化。

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字符串“假”制成。我发现这种放松有时很有用。
  • value2并且value3是对原始发布答案的修改以保持一致性,而不改变结果。
  • value4是 Babel 编译默认参数的方式。
于 2016-03-02T02:52:10.977 回答
3

您可以使用 ECMA6 中的默认函数参数功能。今天,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
于 2015-12-01T16:58:01.067 回答
1

没有太多混淆,您可以这样做以获得默认值。

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

获取默认 false

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

于 2020-01-17T10:36:38.990 回答