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