Подтвердить что ты не робот

Как установить значения булевых значений по умолчанию в 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 всегда 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

Ура!

4b9b3361

Ответ 1

Вы можете сделать это:

this.hasWheels = hasWheels !== false;

Это получает значение true, за исключением случаев, когда hasWheels явно false. (Другие значения фальши, включая null и undefined, приведут к true, который, как я думаю, вам нужен.)

Ответ 2

Как насчет:

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

Другой вариант:

this.hasWheels = arguments.length > 0 ? hasWheels : true;

Ответ 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

Ответ 4

От опубликованных ответов есть варианты.

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", если нужно, чтобы оно было логическим ложным. Я нашел эту релаксацию полезной.
  • value2 и value3 являются модификациями оригинальных опубликованных ответов для согласованности без изменений.
  • value4 заключается в том, как Babel компилируется для параметров по умолчанию.