Operadores lógicos en JavaScript: &&, ||, !, truthiness y precedencia
JavaScript escribe los operadores como !, && y ||, los ordena en ese orden, y permite que cualquier valor haga de booleano mediante la «veracidad» (truthiness). No hay exportación a JavaScript en Tangibool; esta página es una guía de traducción.
| Lógica | JavaScript | Nota |
|---|---|---|
NOT A | !a | Convierte; !!a normaliza a booleano |
A AND B | a && b | Devuelve un operando; cortocircuito |
A OR B | a || b | Devuelve un operando; ?? es distinto |
A XOR B | a !== b entre booleanos | ^ da un número |
A -> B | !a || b | No hay operador de implicación |
A <-> B | a === b entre booleanos | Igualdad estricta |
TRUE, FALSE | true, false | En minúscula; hay ocho valores falsos |
!a, a && b y a || b son los operadores lógicos, con ! ligando con más fuerza, luego &&, luego ||, el mismo orden que NOT, AND, OR aquí. Como en Python, && y || son de cortocircuito y devuelven un operando: 0 || 'default' es 'default', y user && user.name es user cuando user es null. El operador ?? no es un OR lógico: solo pasa al segundo operando con null y undefined, no con 0, '' ni false.
La veracidad es la trampa. Los valores falsos son false, 0, -0, 0n, '', null, undefined y NaN; todo lo demás, incluidos 'false', [] y {}, es verdadero. Una regla evaluada sobre esos valores no es la regla evaluada sobre VERDADERO y FALSO, así que normaliza con Boolean(x) o !!x en la frontera y compara con ===. La semántica del motor tiene dos valores y ninguna conversión, que es la razón de escribir la regla allí primero.
Los operadores de un solo carácter &, |, ^ y ~ convierten sus operandos en enteros de 32 bits, así que true & true es 1, un número, y ~true es -2. Para el o exclusivo entre booleanos usa a !== b; para la implicación escribe !a || b. El analizador de aquí rechaza &, |, ^ y ~ con una corrección, porque una fórmula copiada de JavaScript con esos operadores cambiaría de significado en silencio.
El error habitual
Tratar if (value) como una prueba de true. Es una prueba de veracidad: una cadena vacía, el cero y NaN toman la rama falsa, y la cadena 'false' toma la verdadera. Convierte en la frontera, y después razona sobre dos valores.
Preguntas
¿Tangibool puede exportar JavaScript?
No. Las exportaciones son Python, SQL, SMT-LIB y LaTeX, más CSV y Markdown para las tablas. Para JavaScript, traduce con la tabla de arriba y conserva la tabla de verdad como oráculo de las pruebas.
¿a || b es el OR inclusivo?
Entre dos booleanos, sí, y es VERDADERO cuando lo son los dos. Con otros valores devuelve el primer operando verdadero, y por eso 0 || 5 es 5 y no true.
Relacionado
Véase también
- Operadores booleanos en Python: and, or, not, precedencia y errores comunes
- Operadores lógicos en Java: &&, ||, ! frente a &, | y ^
- Operadores lógicos en C: lógicos frente a bit a bit
- & y | simples son operaciones bit a bit en la mayoría de lenguajes
- ^ significa XOR en C, Java y Python, no AND ni potencia
- ~ es NOT bit a bit en código y NOT lógico en algunos libros
- El doble igual (==) compara valores; para equivalencia lógica usa ↔
- Derivar casos de prueba de una tabla de verdad sin probar todas las filas
Lenguajes
Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.