Valores de Falsey en JavaScript
false
- Cero del
Numbertipo: 0y también -0, 0.0y la forma hexagonal 0x0( RBT gracias )
- Cero de
BigInttipo: 0ny -0n(nuevo en 2020, gracias GetMeARemoteJob )
"", ''y ``- cadenas de longitud 0
null
undefined
NaN
document.all (solo en navegadores HTML)
"Falsey" simplemente significa que la ToBooleanfunción interna de JavaScript regresa false. ToBooleansubyace !value, value ? ... : ...;y if (value). Aquí está su especificación oficial (borrador de trabajo 2020) (los únicos cambios desde la primera especificación de ECMAscript en 1997 son la adición de los símbolos de ES6 , que siempre son verdaderos y BigInt, mencionados anteriormente:

Comparaciones con ==(igualdad suelta)
Vale la pena hablar sobre las comparaciones sueltas de== los valores falsos , que usan ToNumber()y pueden causar cierta confusión debido a las diferencias subyacentes. Efectivamente forman tres grupos:
false, 0, -0, "", '' todos coinciden con ==
- por ejemplo
false == "", '' == 0y por lo tanto4/2 - 2 == 'some string'.slice(11);
null, undefined juntar con ==
- por ejemplo,
null == undefinedperoundefined != false
- También vale la pena mencionar que, si bien
typeof nulldevuelve 'object', nonull es un objeto, este es un error / peculiaridad de larga data que no se corrigió para mantener la compatibilidad. No es un objeto verdadero, y los objetos son verdaderos (excepto por esa "violación intencional" document.allcuando Javascript se implementa en HTML)
NaN no coincide con nada, con ==o ===, ni siquiera consigo mismo
- por ejemplo
NaN != NaN, NaN !== NaN, NaN != false,NaN != null
Con "igualdad estricta" ( ===), no existen tales agrupaciones. Sólo false === false.
Esta es una de las razones por las que muchos desarrolladores y muchas guías de estilo (por ejemplo, standardjs ) prefieren ===y casi nunca usan ==.
Valores de verdad que realmente == false
"Verdad" simplemente significa que la ToBooleanfunción interna de JavaScript regresa true. Una peculiaridad de Javascript a tener en cuenta (y otra buena razón para preferir ===sobre ==): es posible que un valor sea verdadero ( ToBooleanretornos true), pero también == false.
Puede pensar que if (value && value == false) alert('Huh?')es una imposibilidad lógica que no podría suceder, pero lo hará, para:
"0"y '0'- son cadenas no vacías, que son verdaderas, pero Javascript ==coincide con números con cadenas equivalentes (por ejemplo 42 == "42"). Puesto que 0 == false, si "0" == 0, "0" == false.
new Number(0)y new Boolean(false)- son objetos, que son verdaderos, pero ==ve sus valores, cuáles == false.
0 .toExponential(); - un objeto con un valor numérico equivalente a 0
- Cualquier construcción similar que le dé un valor de falsa igualdad envuelto en un tipo que sea verdadero
[], [[]]Y [0](gracias cloudfeet para el enlace de Igualdad JavaScript Tabla )
Algunos valores más verdaderos
Estos son solo algunos valores que algunas personas podrían esperar ser falsos, pero en realidad son verdaderos.
-1 y todos los números negativos distintos de cero
' ', " ", "false", 'null'... todas las cadenas no vacías, incluyendo cadenas que son simplemente los espacios en blanco
Cualquier cosa de typeof, que siempre devuelve una cadena no vacía, por ejemplo:
Cualquier objeto (excepto esa "violación intencional" document.allen los navegadores; recuerde que nullno es realmente un objeto a pesar de typeofsugerir lo contrario). Incluso:
{}
[]
function(){}o () => {}(cualquier función, incluidas las funciones vacías)
Error y cualquier instancia de Error
- Cualquier expresión regular
- Cualquier cosa creada con
new(incluyendo new Number(0)y new Boolean(false))
- Cualquier símbolo
true, 1, "1"Y [1]de retorno truecuando se compara entre sí con ==.