Bueno, no sé si estáis familiarizados con el uso de esta estructura, voy a hacerle un poquito de introducción. Creo que equivale a un condicional
if:
Código PHP:
var valor = A || B;
// esta sentencia equivaldría a lo siguiente:
var valor;
if( A ) valor = A;
else valor = B;
// de esta manera:
var valor = 0 || 12; // valor vale 12
var valor = undefined || 45; // valor vale 45
var valor = -15 || null; // valor vale -15
Está muy bien en el caso de tener que escoger entre dos variables, una que devuelve undefined y la otra que devuelve bien (
true creo). Por ejemplo para argumentos opcionales en una función:
Código PHP:
function miFunc(elementos) {
var elementos = elementos || 1;
}
//aquí elementos dentro de la función siempre será el valor que le demos, pero si no le damos valor valdrá 1
Pero tengo algunas dudas con este operador, no consigo entender bien su funcionamiento. Creo que escoge el valor que hace
true. He descubierto que el orden
SÍ importa. Si los dos elementos dan
true se escoge el
primero (
12 || 12.5 ==>
12 ) (
12.5 || 12 ==>
12.5 ).
Si los dos elementos dan
false hay una preferencia, la cual no logro entender todavía, pero espero que exista. No se escoge el primero, lo raro es que siempre se escoge el
último. Voy a poner un par de ejemplos que me he encontrado:
Código PHP:
// FALSE
Derecho: false || undefined = undefined
Revés: undefined || false = false
Derecho: false || NaN = NaN
Revés: NaN || false = false
Derecho: false || null = null
Revés: null || false = false
// CERO
Derecho: 0 || undefined = undefined
Revés: undefined || 0 = 0
Derecho: 0 || NaN = NaN
Revés: NaN || 0 = 0
Derecho: 0 || null = null
Revés: null || 0 = 0
// NaN
Derecho: undefined || NaN = NaN
Revés: NaN || undefined = undefined
Derecho: NaN || null = null
Revés: null || NaN = NaN
Entonces no lo tengo muy claro.
¿Existe alguna preferencia para estos operadores?
¿Si dan los dos true se escoge el primero? ¿Si dan los dos false se escoge el último?, ¿se puede confirmar ésto? En ese caso es interesante porque en el ejemplo de los argumentos opcionales, si quiero que
elementos sea
0 cuando le pase
undefined, tendría que poner el 0 al final.
¿Alguno sabe algo de ésto?
Gracias por participar