Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/10/2007, 15:31
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 23 años
Puntos: 45
Intentar sustituir condicionales por OR lógicos (||)

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
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.