ejemplos - javascript html
Todos los valores de falsey en JavaScript (3)
Valores de Falsey en JavaScript
-
false
-
0
y-0
-
""
,''''
y``
-
null
-
undefined
-
NaN
-
document.all
(en los navegadores HTML solamente) - este es uno raro, es un objeto falsey, contypeof
comoundefined
. Era una función propietaria de Microsoft en IE antes de IE11, y se agregó a la especificación HTML como una "violación deliberada de la especificación JavaScript" para que los sitios escritos para IE no se interrumpieran al intentar acceder, por ejemplo,document.all.something
; es falso porqueif (document.all)
solía ser una forma popular de detectar IE, antes de los comentarios condicionales. Ver ¿Por qué document.all falsy? para detalles
"Falsey" simplemente significa que la función ToBoolean
interna de ToBoolean
devuelve false
. ToBoolean
subyace !value
, value ? ... : ...;
value ? ... : ...;
y if(value){...}else{...}
. Aquí está su especificación oficial (borrador de trabajo 2018) (el único cambio desde la primera especificación de ECMAscript en 1997 es la adición de Símbolos de ES6 , que siempre son ciertos):
Comparaciones con ==
(igualdad suelta)
Vale la pena hablar de las comparaciones sueltas de los valores falsy con ==
, que usa ToNumber()
y puede causar cierta confusión debido a las diferencias subyacentes. Ellos efectivamente forman tres grupos:
-
false, 0, -0, "", ''''
todos coinciden con==
- por ejemplo,
false == ""
,'''' == 0
y por lo tanto4/2 - 2 == ''some string''.slice(11);
- por ejemplo,
- coincidencia
null, undefined
con==
- por ejemplo,
null == undefined
peroundefined != false
- También vale la pena mencionar que aunque
typeof null
devuelve''object''
,null
no es un objeto, este es un bug / quirk de larga data que no se solucionó para mantener la compatibilidad. No es un objeto verdadero, y los objetos son verdaderos (excepto por eldocument.all
"violación deliberada"). Todo cuando se implementa Javascript en HTML.
- por ejemplo,
-
NaN
no coincide con nada, con==
o===
, ni siquiera a sí mismo- por ejemplo
NaN != NaN
,NaN !== NaN
,NaN != false
,NaN != null
- por ejemplo
Con "igualdad estricta" ( ===
), no hay tales agrupaciones. Solo false
===
false
.
Truthy valores que en realidad == false
"Truthy" simplemente significa que la función ToBoolean
interna de ToBoolean
devuelve true
. Una peculiaridad de Javascript a tener en cuenta: es posible que un valor sea cierto ( ToBoolean
devuelve true
), pero también == false
.
Podrías pensar if( value && value==false ){ alert("huh?"); }
if( value && value==false ){ alert("huh?"); }
es una imposibilidad lógica que no podría suceder, pero lo hará, por:
-
"0"
y''0''
: son cadenas no vacías, que son ciertas, pero Javascript==
coincide con números con cadenas equivalentes (por ejemplo,42 == "42"
). Dado que0 == false
, si"0"==0
,"0"==false
. -
new Number(0)
ynew Boolean(false)
- son objetos, que son verdaderos, pero==
ve sus valores, que== false
. -
0 .toExponential();
- un objeto con un valor numérico equivalente a0
- Cualquier construcción similar que le brinde un valor de igualdad falsa envuelto en un tipo que es verdad
-
[]
,[[]]
y[0]
(gracias a los cloudfeet en la cloudfeet para el dorey.github.io/JavaScript-Equality-Table )
Algunos valores más verdaderos
Estos son solo algunos de los valores que algunas personas pueden esperar falsey, pero en realidad son verdad.
-
-1
y todos los números negativos distintos de cero -
'' ''
," "
,"false"
,''null''
... todas las cadenas no vacías, incluidas las cadenas que son solo espacios en blanco Cualquier cosa desde
typeof
, que siempre devuelve una cadena no vacía, por ejemplo:-
typeof null
(devuelve una cadena''object''
debido a un bug / peculiar antiguo ) -
typeof undefined
(devuelve una cadena''undefined''
)
-
Cualquier objeto (tenga en cuenta que
null
no es realmente un objeto), incluyendo:-
{}
-
[]
-
function(){}
o() => {}
(cualquier variable definida como una función, incluidas las funciones vacías) - Cualquier expresión regular
- Cualquier cosa creada con
new
(incluyendo los valores falsey creados connew
, ver arriba)
-
- Cualquier símbolo
true
, 1
, "1"
y [1]
devuelven true
cuando se comparan entre sí con ==
.
¿Cuáles son los valores en JavaScript que son ''falsey'' , lo que significa que se evalúan como falsos en expresiones como if(value)
, value ?
y !value
?
Ya hay algunas discusiones sobre el propósito de los valores de falsey en Stack Overflow , pero no hay una respuesta completa exhaustiva que enumere cuáles son todos los valores de falsey.
No pude encontrar ninguna lista completa en la Referencia de JavaScript de MDN , y me sorprendió descubrir que los mejores resultados cuando se buscaba una lista completa y autorizada de los valores de falsey en JavaScript eran artículos de blog, algunos de los cuales tenían omisiones obvias (por ejemplo, NaN
), y ninguno de los cuales tenía un formato como Stack Overflow donde se podían agregar comentarios o respuestas alternativas para señalar caprichos, sorpresas, omisiones, errores o advertencias. Entonces, parecía tener sentido hacer uno.
No te olvides de la cadena no vacía "false"
que se evalúa como true
Solo para agregar a la lista de valores falsy de @ user568458:
Además del número entero 0, el número decimal 0.0, 0.00 o cualquier otro número de cero es también un valor falso.
var myNum = 0.0; if(myNum){ console.log(''I am a truthy value''); } else { console.log(''I am a falsy value''); }
Por encima del fragmento de código imprime
I am a falsy value
De manera similar, la representación hexadecimal del número 0 también es un valor falso como se muestra en el siguiente fragmento de código:
var myNum = 0x0; //hex representation of 0 if(myNum){ console.log(''I am a truthy value''); } else { console.log(''I am a falsy value''); }
El fragmento de código anterior muestra nuevamente
I am a falsy value
.