principales - ¿Cómo establecer valores booleanos predeterminados en JavaScript?
tipos de datos principales en javascript (4)
La configuración de los valores opcionales predeterminados en JavaScript generalmente se realiza a través de ||
personaje
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''
Eso funciona porque el color
es undefined
e undefined || String
undefined || String
es siempre la String
. Por supuesto que también funciona al revés String || undefined
String || undefined
es String
. Cuando hay dos Strings
presentes, la primera gana ''this'' || ''that''
''this'' || ''that''
es ''this''
. NO funciona al revés como ''that'' || ''this''
''that'' || ''this''
es ''that''
.
La pregunta es: ¿Cómo puedo lograr lo mismo con los valores booleanos?
Toma el siguiente ejemplo
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 !!!!!!
Para myCar
funciona porque undefined || true
undefined || true
es true
pero, como puede ver, NO funciona para myOtherCar
porque false || true
false || true
es true
Cambiar el orden no ayuda como true || false
true || false
sigue siendo true
Por lo tanto, ¿me falta algo aquí o es la siguiente la única forma de establecer el valor predeterminado?
this.hasWheels = (hasWheels === false) ? false: true
¡Aclamaciones!
Hay variaciones a tener en cuenta a partir de las respuestas publicadas.
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
sevalue0
especialmente a partir devalue0
para la cadena ''false'' si se necesita que sea boolean false. Encontré esta relajación útil ocasionalmente. -
value2
yvalue3
son modificaciones de las respuestas publicadas originalmente paravalue3
coherencia, sin resultados modificados. -
value4
es la forma en que Babel compila los parámetros por defecto.
Puede utilizar la función de parámetros de la función predeterminada en ECMA6. Hoy en día, ECMA6 aún no es totalmente compatible con el navegador, pero puede usar babel y comenzar a usar las nuevas funciones de inmediato.
Entonces, el ejemplo original será tan simple como:
// 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
Puedes hacerlo:
this.hasWheels = hasWheels !== false;
Eso te da un valor true
, excepto cuando hasWheels
es explícitamente false
. (Otros valores falsos, incluyendo null
e undefined
, resultarán en true
, lo que creo que es lo que quieres).
Qué tal si:
this.hasWheels = (typeof hasWheels !== ''undefined'') ? hasWheels : true;
Tu otra opción es:
this.hasWheels = arguments.length > 0 ? hasWheels : true;