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 {}
true && 1
=> esto siempre devolverá el último valor de && si todas las condiciones son verdaderas o falsas de lo contrario
true || 1
true || 1
=> esto siempre devolverá el primer valor ''verdadero''
Recursos: