en javascript,
var a = '';
var b = (a) ? true : false;
var bse ajustará a false.
¿Es este un comportamiento definido en el que se puede confiar?
javascript
string
boolean
cc joven
fuente
fuente

falseaquí: jsfiddle.net/8CKbd''se evalúa a falso en un contexto booleano así que sia = '';entoncesa ? false : true=>'' ? false : true=>false ? false : true=>true(porque es la evaluación de un valor falso). Creo que debería servar b = (a) ? true : false;correcto con la siguiente declaración.Respuestas:
Si. Javascript es un dialecto de ECMAScript, y la especificación del lenguaje ECMAScript define claramente este comportamiento:
Cita tomada de http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
fuente
new String("")es verdad! Esto se debe a que es un objeto, mientras que la forma corta""representa la versión de valor primitivo. Lo mismo vale paranew Number(0)e inclusonew Boolean(false). Es una buena razón para no usar las versiones de objetos en su código, y eso significa queif (str.length)maneja este caso límite mientrasif (str)que no lo haría.Si. Todo
false,0, cadenas vacías''y"",NaN,undefined, ynullsiempre se evalúan comofalse; todo lo demás estrue.Y en su ejemplo, b es
falsedespués de la evaluación. (Creo que escribiste por errortrue)fuente
nullno esfalse, tampocotrue,nullesnull. jsfiddle.net/sq1Lkpg0NaNyundefined. No lo sonfalsepero son falsas. Que es lo que se le pidió.Como la explicación anterior, sí , ese es el comportamiento definido de una cadena vacía en un condicional (una
ifexpresión,||,&&,? :, ...). (El estándar dice que se debe aplicar la operación interna ToBoolean ).La evaluación es diferente cuando se utiliza la cadena vacía en una comparación (ver Verdad, Igualdad y JavaScript ), aunque los resultados son en su mayoría los mismos :
Explicación: Esencialmente, cuando los operandos de
==tienen diferentes tipos, JavaScript se esfuerza por convertirlos a Números, de acuerdo con su valor , ( usando operaciones que las llamadas estándar ToNumber y ToPrimitive ), y luego se aplica internamente===. Pero cuando se usa===directamente, los tipos no se convierten, por lo que siempre se compara una cadena con un booleanofalse.En términos generales, la prueba de condicionales de JavaScript ( ToBoolean ) para un valor definido, no nulo, no cero, no vacío, no falso (una cadena vacía está ... vacía, los números -0 o +0 son ... cero, NaN no es un número definido, pero un Objeto vacío aparentemente no está realmente vacío), o como me gusta pensar, los condicionales prueban una cosa (verdadera) , mientras
==compara los valores aparentes, cuidadosamente convertidos ( ToPrimitive , ToNumber ) de sus operandos, y===busca la similitud exacta .Hay más ejemplos en Verdad, Igualdad y JavaScript en los que esta distinción realmente importa, por ejemplo,
'0'estruecondicional (longitud distinta de cero, o es una cosa ), perofalseen una==comparación (el valor es cero).'1'de nuevo, estrueen ambos casos (es una cosa y tiene un valor distinto de cero).fuente
var bse ajustará atrue. Esto se debe a que una cadena vacía cuenta como un valor 'falsey' en JavaScript al igual que otros valores.Mire http://www.sitepoint.com/javascript-truthy-falsy/ para ver los valores falsos
fuente
var ben realidad se establecerá entrueporque es lo opuesto avar asi nos fijamos en el código.fuente