Valores de Falsey en JavaScript
false
- Cero del
Number
tipo: 0
y también -0
, 0.0
y la forma hexagonal 0x0
( RBT gracias )
- Cero de
BigInt
tipo: 0n
y -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 ToBoolean
función interna de JavaScript regresa false
. ToBoolean
subyace !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 == ""
, '' == 0
y por lo tanto4/2 - 2 == 'some string'.slice(11);
null, undefined
juntar con ==
- por ejemplo,
null == undefined
peroundefined != false
- También vale la pena mencionar que, si bien
typeof null
devuelve '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.all
cuando 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 ToBoolean
funció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 ( ToBoolean
retornos 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.all
en los navegadores; recuerde que null
no es realmente un objeto a pesar de typeof
sugerir 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 true
cuando se compara entre sí con ==
.