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: 21 años, 1 mes
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 || B;
// esta sentencia equivaldría a lo siguiente:
var valor;
if( 
valor A;
else 
valor B;

// de esta manera:
var valor || 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 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

Derechofalse || 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|| undefined undefined
Revés
:   undefined || 0

Derecho
|| NaN NaN
Revés
:   NaN || 0

Derecho
|| null null
Revés
:   null || 0


 
// NaN

Derechoundefined || 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.