Valores de Falsey em JavaScript
false
- Zero de
Number
tipo: 0
e também -0
, 0.0
e forma hexagonal 0x0
( graças RBT )
- Zero do
BigInt
tipo: 0n
e -0n
(novo em 2020, obrigado GetMeARemoteJob )
""
, ''
e ``
- cadeias de comprimento 0
null
undefined
NaN
document.all
(apenas em navegadores HTML)
"Falsey" significa simplesmente que a ToBoolean
função interna do JavaScript retorna false
. ToBoolean
subjaz !value
, value ? ... : ...;
e if (value)
. Aqui está sua especificação oficial (esboço de trabalho para 2020) (as únicas alterações desde a primeira especificação ECMAscript em 1997 são a adição dos símbolos do ES6 , que são sempre verdadeiros e BigInt
mencionados acima:

Comparações com ==
(igualdade solta)
Vale a pena falar das comparações frouxas==
dos valores falsos , que usam ToNumber()
e podem causar alguma confusão devido às diferenças subjacentes. Eles formam efetivamente três grupos:
false, 0, -0, "", ''
todos combinam com ==
- por exemplo
false == ""
, '' == 0
e portanto4/2 - 2 == 'some string'.slice(11);
null, undefined
combina com ==
- por exemplo,
null == undefined
masundefined != false
- Também vale a pena mencionar que, enquanto
typeof null
retornos 'object'
, null
é não um objeto, este é um longa data bug / peculiaridade que não foi fixado, a fim de manter a compatibilidade. Não é um objeto verdadeiro, e os objetos são verdadeiros (exceto a "violação intencional" document.all
quando o Javascript é implementado em HTML)
NaN
não corresponde a nada, com ==
ou ===
, nem mesmo a si próprio
- por exemplo
NaN != NaN
, NaN !== NaN
, NaN != false
,NaN != null
Com "igualdade estrita" ( ===
), não existem tais agrupamentos. Só false
===
false
.
Essa é uma das razões pelas quais muitos desenvolvedores e muitos guias de estilo (por exemplo, standardjs ) preferem ===
e quase nunca usam ==
.
Valores reais que realmente == false
"Verdade" significa simplesmente que a ToBoolean
função interna do JavaScript retorna true
. Um capricho do Javascript estar ciente de (e outra boa razão para preferir ===
mais ==
): é possível para um valor a ser truthy ( ToBoolean
retornos true
), mas também == false
.
Você pode pensar que if (value && value == false) alert('Huh?')
é uma impossibilidade lógica que não poderia acontecer, mas ocorrerá por:
"0"
e '0'
- são strings não vazias, que são verdadeiras, mas o Javascript ==
combina números com strings equivalentes (por exemplo 42 == "42"
). Desde 0 == false
, se "0" == 0
, "0" == false
.
new Number(0)
e new Boolean(false)
- são objetos que são verdadeiros, mas ==
vêem seus valores, quais == false
.
0 .toExponential();
- um objeto com um valor numérico equivalente a 0
- Quaisquer construções semelhantes que fornecem um valor de igual falso envolvido em um tipo verdadeiro
[]
, [[]]
e [0]
(obrigado cloudfeet pelo link JavaScript Equality Table )
Alguns valores mais verdadeiros
Esses são apenas alguns valores que algumas pessoas podem esperar ser falsey, mas são realmente verdadeiros.
-1
e todos os números negativos diferentes de zero
' '
, " "
, "false"
, 'null'
... todas as cadeias não vazias, incluindo cordas que são apenas espaços em branco
Qualquer coisa de typeof
, que sempre retorna uma string não vazia, por exemplo:
Qualquer objeto (exceto a "violação intencional" document.all
nos navegadores; lembre-se de que null
não é realmente um objeto, apesar de typeof
sugerir o contrário). Incluindo:
{}
[]
function(){}
ou () => {}
(qualquer função, incluindo funções vazias)
Error
e qualquer instância de Error
- Qualquer expressão regular
- Qualquer coisa criada com
new
(incluindo new Number(0)
e new Boolean(false)
)
- Qualquer símbolo
true
, 1
, "1"
E [1]
retorno true
quando comparados uns com os outros com ==
.