tipos principales primitives example estructuras estructura ejemplos datos data javascript boolean

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 se value0 especialmente a partir de value0 para la cadena ''false'' si se necesita que sea boolean false. Encontré esta relajación útil ocasionalmente.
  • value2 y value3 son modificaciones de las respuestas publicadas originalmente para value3 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;