colorX es mi parámetro de alguna función.
colorX = typeof colorX !== ('undefined' || 'null' || '') ? colorX : 'abc';Aquí para 'indefinido' obtengo abc como valor. Pero cuando paso una cadena nula o 'nula' o vacía como entrada de parámetro. me sale error
Además, ¿cuál es la diferencia entre nulo y 'nulo'?
null vs 'null' Cuando se usa typeof , espera una versión de cadena del tipo, como 'undefined' , 'function' , 'bigint' , etc. Sin embargo, específicamente para el tipo null , funciona como un objeto:
console.log(typeof null); // expected output: object console.log(typeof 'strExample'); // expected output: string // We can return a boolean by doing so: let variable = 10; console.log(typeof variable === 'string'); // expected output: falseLa explicación de por qué se puede encontrar en MDN :
En la primera implementación de JavaScript, los valores de JavaScript se representaban como una etiqueta de tipo y un valor. La etiqueta de tipo para los objetos era
0.nullse representó como el puntero NULL (0x00en la mayoría de las plataformas). En consecuencia,nulltenía 0 como etiqueta de tipo, de ahí eltypeofde valor de retorno"object". ( referencia )Se propuso una solución para ECMAScript (a través de una suscripción), pero fue rechazada . Habría resultado en
typeof null === 'null'.
En cualquier otro escenario, 'null' , 'undefined' y 'string' se identificarían como cadenas ya que están rodeadas de '' 's, donde esto es a lo que se refería @reyno.
Vea todos los valores aceptados para typeof aquí .
// null will be identified as an "object" type; checking // null with typeof is redundant as {} can be the same as null. console.log(typeof null); // expected output: object console.log(typeof {}); // expected output: object // so we can just do: let colorX = null; console.log(colorX === null); // expected output: trueDado que los valores falsos pueden ser cualquiera de estos:
Además de
false, las posibles expresiones falsas son:null,NaN,0, la cadena vacía ("") yundefined.
Simplemente podemos hacer:
colorX = colorX || 'abc';Como afirma @ivar.
Usando el operador ternario podría simplemente hacer esto para
colorX = colorX ? colorX : 'abc';La sintaxis del operador condicional (ternario) es
condition ? exprIfTrue : exprIfFalsey de acuerdo con los documentos de MDN
... nulo, NaN, 0, la cadena vacía ("") e indefinido. Si condition es cualquiera de estos, el resultado de la expresión condicional será el resultado de ejecutar la expresión exprIfFalse.
Pero alternativamente e incluso más corto (en caso de que esté verificando todos los valores 'falsos'), también puede usar el OR lógico
colorX = colorX || 'abc';Como dice que desea verificar todos los valores falsos excepto 0, puede combinar ambos
let v = 0 v = v || v === 0 ? v : 'value' console.log(v) // 0Darse cuenta de
null, undefined, 0con comillas simplemente se convierten en cadenas que contienen los caracteres sin "significado funcional"