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