Sé que puedo probar una variable de JavaScript y luego definirla si no está definida, pero ¿no hay alguna forma de decirlo?
var setVariable = localStorage.getItem ('valor') || 0;
Parece una forma mucho más clara, y estoy bastante seguro de que he visto esto en otros idiomas.
javascript
undefined
pedalpete
fuente
fuente
localStorage.getItem()
arrojará una excepción si el usuario ha deshabilitado las cookies (al menos en Chrome), por lo que es posible que desee envolverlo dentro de unatry...catch
cláusulaRespuestas:
Sí, puede hacer eso, pero estrictamente hablando, asignará el valor predeterminado si el valor recuperado es falsey , en lugar de verdaderamente indefinido . Sería, por tanto, no sólo igualar
undefined
, sino tambiénnull
,false
,0
,NaN
,""
(pero no"0"
).Si desea establecer el valor predeterminado solo si la variable es estrictamente,
undefined
entonces la forma más segura es escribir:En los navegadores más nuevos, en realidad es seguro escribir:
pero tenga en cuenta que es posible subvertir esto en navegadores antiguos donde se le permitió declarar una variable llamada
undefined
que tiene un valor definido, lo que hace que la prueba falle.fuente
var x = (x === undefined ? def_val : x);
como un poco más largovar x = (typeof x === 'undefined') ? def_val : x;
? ¿El comportamiento difiere?undefined
redefinir, lo que provocó que la prueba de igualdad fallara.||
enfoque en una prueba estricta para indefinido, debe usar una prueba explícita paraundefined
condicional.La respuesta ES6 2018 es :
Si la variable x no está definida, devuelva la variable y ... de lo contrario, si la variable x está definida, devuelva la variable x.
fuente
Object.is
no es mejor que===
en este caso. "El operador === (y el operador == también) trata los valores numéricos -0 y +0 como iguales y trata Number.NaN como no igual a NaN". ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) No importa aquí.Object.is
si ambos operandos pueden serNaN
.undefined
. Así===
funcionará el 100% del tiempo, no solo el 98%. La ventaja de===
ser más fácil de leer, especialmente de un vistazo, es más corta y evita una llamada de método innecesaria. Personalmente solo lo usaríaObject.is()
cuando la situación lo requiera y prefiera===
en todos los demás casos.Necesitaba "establecer una variable si no estaba definida" en varios lugares. Creé una función usando la respuesta @Alnitak. Esperemos que ayude a alguien.
Uso:
fuente
Parece más lógico verificar en
typeof
lugar deundefined
? Supongo que espera un número cuando establece la var0
cuando no está definido:En este caso, si
getVariable
no es un número (cadena, objeto, lo que sea), setVariable se establece en0
fuente
Respuesta de ES2020
Con el Operador de fusión nula , puede establecer un valor predeterminado si
value
es nulo o no está definido.Sin embargo, debe tener en cuenta que el operador de fusión nulo no devuelve el valor predeterminado para otros tipos de valores falsos como
0
y''
.Tenga en cuenta que el soporte del navegador para el operador es limitado. Según los datos de caniuse , solo el 48.34% de los navegadores son compatibles (a partir de abril de 2020). El soporte de Node.js se agregó en la versión 14 .
fuente
Si eres un fan de FP ( programación funcional ), Ramda tiene una función de ayuda ordenada para esto llamada defaultTo :
uso:
const result = defaultTo(30)(value)
Es más útil cuando se trata de
undefined
valores booleanos:const result2 = defaultTo(false)(dashboard.someValue)
fuente
const result = value || 30;
, excepto que está usando una función intermedia y +1000 bytes libvar setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;
fuente
localStorage.getItem('value'))
regresafalse
Hoy también me encontré con este escenario donde no quería que se sobrescribiera cero para varios valores. Tenemos un archivo con algunos métodos de utilidad comunes para escenarios como este. Esto es lo que agregué para manejar el escenario y ser flexible.
Luego se puede invocar con los dos últimos parámetros como opcionales si solo quiero establecer valores indefinidos o también sobrescribir valores nulos o 0. Aquí hay un ejemplo de una llamada que establecerá la ID en -1 si la ID no está definida o es nula, pero no sobrescribirá un valor 0.
fuente
En nuestros días puedes hacer tu acercamiento con JS:
Entonces su ejemplo FUNCIONARÁ:
fuente
Funciona incluso si el valor predeterminado es un valor booleano:
fuente
Me parece que, para las implementaciones actuales de JavaScript,
es una buena manera de hacer esto (usando la deconstrucción de objetos).
fuente
Asignación nula lógica, solución ES2020 +
Los nuevos operadores se están agregando actualmente a los navegadores,
??=
,||=
, y&&=
. Esta publicación se centrará en??=
.Esto verifica si el lado izquierdo no está definido o es nulo, cortocircuitando si ya está definido. Si no, el lado derecho se asigna a la variable del lado izquierdo.
Métodos comparativos
Ejemplos básicos
Ejemplos de objeto / matriz
?? = Soporte del navegador Julio 2020 - .03%
?? = Documentación de Mozilla
|| = Documentación de Mozilla
&& = Documentación de Mozilla
fuente