true traduccion ejemplo javascript boolean

traduccion - string to boolean javascript



En JavaScript, ¿por qué es "0" igual a falso, pero cuando se prueba con ''if'' no es falso por sí mismo? (10)

Lo siguiente muestra que "0" es falso en Javascript:

>>> "0" == false true >>> false == "0" true

Entonces, ¿por qué la siguiente impresión es "ha" ?

>>> if ("0") console.log("ha") ha


Es PHP donde la cadena "0" es falsy (false-when-used-in-boolean-context). En JavaScript, todas las cadenas no vacías son sinceras.

El truco es que == contra un booleano no se evalúa en un contexto booleano, se convierte en número y, en el caso de cadenas, se realiza analizando como decimal. Entonces obtienes el Número 0 lugar de la true booleana true .

Este es un poco mal diseño de lenguaje y es una de las razones por las que intentamos no utilizar el operador desafortunado == . Utilice === lugar.


Es de acuerdo a las especificaciones.

12.5 The if Statement ..... 2. If ToBoolean(GetValue(exprRef)) is true, then a. Return the result of evaluating the first Statement. 3. Else, ....

ToBoolean, según la especificación, es

La operación abstracta ToBoolean convierte su argumento en un valor de tipo Boolean de acuerdo con la Tabla 11:

Y esa tabla dice esto acerca de las cuerdas:

El resultado es falso si el argumento es la Cadena vacía (su longitud es cero); de lo contrario el resultado es verdadero

Ahora, para explicar por qué "0" == false , debe leer el operador de igualdad, que indica que obtiene su valor de la operación abstracta GetValue(lref) coincide con el mismo para el lado derecho.

Lo que describe esta parte relevante como:

if IsPropertyReference(V), then a. If HasPrimitiveBase(V) is false, then let get be the [[Get]] internal method of base, otherwise let get be the special [[Get]] internal method defined below. b. Return the result of calling the get internal method using base as its this value, and passing GetReferencedName(V) for the argument

O, en otras palabras, una cadena tiene una base primitiva, que devuelve el método interno de obtención y termina pareciendo falsa.

Si desea evaluar cosas usando la operación GetValue use == , si desea evaluar usando el ToBoolean , use === (también conocido como el operador de igualdad "estricto")


La expresión "if" prueba la veracidad, mientras que la prueba de la doble-igualdad para la equivalencia independiente del tipo. Una cadena siempre es veraz, como otros han señalado aquí. Si el doble igual probara la veracidad de sus dos operandos y luego comparara los resultados, obtendría el resultado que estaba asumiendo intuitivamente, es decir ("0" == true) === true . Como lo dice Doug Crockford en su excelente JavaScript: las partes buenas , "las reglas mediante las cuales [== obliga a los tipos de sus operandos] son ​​complicadas y no memorables ... La falta de transitividad es alarmante". Basta con decir que uno de los operandos es de tipo forzado para que coincida con el otro, y que "0" termina siendo interpretado como un cero numérico, que a su vez equivale a falso cuando es forzado a booleano (o falso es equivalente a cero cuando es obligado a un número).


La razón es porque cuando explícitamente haces "0" == false , ambos lados se convierten a números, y luego se realiza la comparación.

Cuando lo hace: if ("0") console.log("ha") , se está probando el valor de la cadena. Cualquier cadena no vacía es true , mientras que una cadena vacía es false .

Igual (==)

Si los dos operandos no son del mismo tipo , JavaScript convierte los operandos y aplica una comparación estricta. Si cualquiera de los operandos es un número o un valor booleano , los operandos se convierten a números si es posible; de lo contrario, si cualquiera de los dos operandos es una cadena , el otro se convierte en una cadena si es posible. Si ambos operandos son objetos , JavaScript compara las referencias internas que son iguales cuando los operandos se refieren al mismo objeto en la memoria.

(De operadores de comparación en la red de desarrolladores de Mozilla)


Sus citas en torno al 0 convierten en una cadena, que se evalúa como verdadera.

Eliminar las comillas y debería funcionar.

if (0) console.log("ha")




== El operador de igualdad evalúa los argumentos después de convertirlos en números. Entonces, la cadena cero "0" se convierte al tipo de datos Número y el booleano falso se convierte en el Número 0. Entonces

"0" == false // true

Lo mismo se aplica a `

false == "0" //true

=== La verificación de igualdad estricta evalúa los argumentos con el tipo de datos original

"0" === false // false, because "0" is a string and false is boolean

Lo mismo se aplica a

false == "0" // false

En

if("0") console.log("ha");

La Cadena "0" no se compara con ningún argumento, y la cadena es un valor verdadero hasta o a menos que se compare con cualquier argumento. Es exactamente como

if(true) console.log("ha");

Pero

if (0) console.log("ha"); // empty console line, because 0 is false

`


// I usually do this: x = "0" ; if (!!+x) console.log(''I am true''); else console.log(''I am false''); // Essentially converting string to integer and then boolean.


if (x)

coerces x usando el booleano interno de JavaScript (http://es5.github.com/#x9.2)

x == false

obliga a ambos lados usando una coerción interna a Número (http://es5.github.com/#x9.3) o toPrimitive para objetos (http://es5.github.com/#x9.1)

Para obtener más información, consulte javascriptweblog.wordpress.com/2011/02/07/…