operator integers javascript numbers boolean type-conversion

operator - javascript compare integers



Conversión de tipo JavaScript:(true && 1) vs(true | | 1) (6)

JavaScript es un lenguaje no estrictamente escrito como Java, por ejemplo.

Como sabemos, convierte el valor del resultado en función del contexto:

"2" + "3" resultados "23"

"2" * "3" resultados 6

Esto es bastante claro y está bien para la comprensión.

Acabo de intentar las siguientes expresiones y me confundí:

true && 1 resultados 1
true || 1 true || 1 resultados true

¿Por qué el primero da Número y el segundo da booleano?

Teniendo en cuenta las reglas de conversión de JavaScript, espero obtener valores boolean en ambos casos, debido al contexto boolean de expresión.


Está confundiendo el lanzamiento (los operadores * / + harán esto) con la evaluación lógica (que &&, ||) hace.


Esto no tiene nada que ver con la conversión de tipos.

|| Devuelve el primer operando de verdad. 1 || true 1 || true te dara 1

&& devuelve el primer operando falsy, o el segundo operando si ambos son veraces.

Ver página 58 de la especificación ECMAScript.


Para citar a MDC ;

&&; Devuelve expr1 si se puede convertir en falso; De lo contrario, devuelve expr2. Por lo tanto, cuando se usa con valores booleanos, && devuelve verdadero si ambos operandos son verdaderos; de lo contrario, devuelve falso.
|| ; Devuelve expr1 si se puede convertir en verdadero; De lo contrario, devuelve expr2. Por lo tanto, cuando se utiliza con valores booleanos, || devuelve verdadero si cualquiera de los operandos es verdadero; Si ambos son falsos, devuelve falso.

Entonces, en el primer ejemplo, se devuelve 1 porque expr1 no se puede convertir a falso.

En el segundo ejemplo, true se puede convertir en true, por lo que se devuelve.


Revisa el sitio de Douglas Crockford , dice:

El operador && es comúnmente llamado lógico y. También se puede llamar guardia. Si el primer operando es falso, nulo, no definido, "" (la cadena vacía), o el número 0, devuelve el primer operando. De lo contrario, devuelve el segundo operando. Esto proporciona una manera conveniente de escribir un cheque nulo:

var value = p && p.name; /* The name value will only be retrieved from p if p has a value, avoiding an error. */

El || El operador es comúnmente llamado lógico o. También se puede llamar por defecto. Si el primer operando es falso, nulo, no definido, "" (la cadena vacía), o el número 0, entonces devuelve el segundo operando. De lo contrario, devuelve el primer operando. Esto proporciona una manera conveniente de especificar valores predeterminados:

value = v || 10; /* Use the value of v, but if v doesn''t have a value, use 10 instead. */


También puedes hacer otras cosas como:

var myVar = Math.random() > 0.5; myVar && doFunc();

que es lo mismo que

if(myVar) { doFunc(); }

El || básicamente significa "Si lo primero es falso, ve al segundo"

El && básicamente significa "Si lo primero es cierto, ve al segundo"

Es por esto que ves cosas como esta en la parte superior de las funciones:

function myFunction(options) { options = options || {}; }

Lo que significa: Si las opciones son falsey, hazlo {}