espaƱol ejemplos descargar definicion curso caracteristicas javascript

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, con typeof como undefined . 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 porque if (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 tanto 4/2 - 2 == ''some string''.slice(11);
  • coincidencia null, undefined con ==
    • por ejemplo, null == undefined pero undefined != 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 el document.all "violación deliberada"). Todo cuando se implementa Javascript en HTML.
  • NaN no coincide con nada, con == o === , ni siquiera a sí mismo
    • por ejemplo NaN != NaN , NaN !== NaN , NaN != false , NaN != null

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 que 0 == false , si "0"==0 , "0"==false .
  • new Number(0) y new Boolean(false) - son objetos, que son verdaderos, pero == ve sus valores, que == false .
  • 0 .toExponential(); - un objeto con un valor numérico equivalente a 0
  • 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:

  • 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 con new , 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 .