2009-09-04 12 views
15

Estoy utilizando una gran biblioteca JS para realizar ciertas operaciones de dibujo en lienzo. Revisando el código de la biblioteca (para hacer cambios acomodaticios), me encontré con el '||' operador que se utiliza de una manera que ciertamente no debería evaluar a Boolean. ¿Esto significa que este es un operador diferente o me estoy perdiendo algo obvio? Un ejemplo es el siguiente:Javascript || operador

var $time = Date.now || function(){ 
return +new Date; 
}; 
+0

Supongo que sería si Date.now por algún motivo devolviera un 0, entonces, en su lugar, establecería $ time para el valor de retorno de la función ...? – peirix

+0

@peirix: Adivinaste mal. $ time será una función que devolverá la Fecha actual. Está configurado para ser un alias de Date.now si está definido (no es falso) o la función suministrada de lo contrario. –

+0

Ah, es por eso que no lo configuré como una respuesta.No hay forma de revocar un comentario: p Entonces, uno debería saber más acerca de la variable 'Date.now' para saber completamente cómo funcionaría esto, entonces? – peirix

Respuesta

13

El || operator evalúa al primer operando si se puede convertir en verdadero o el último operando de otro modo. Por lo tanto, en su ejemplo $time será Date.now si existe o la función declarada de lo contrario.

+0

La primera operante no falsa, es decir. –

+10

No es el primer operando que se puede convertir en verdadero. La última expresión se usa incluso si se convierte a falso. – googletorp

0

Esto es muy común es javascript. Si Data.now se evalúa como verdadero, entonces $ time se establece en eso, de lo contrario, se establece en la función.

+0

La función no tiene() unida al corsé de cierre, por lo que $ time está configurado para la función, no su salida. – Quentin

+0

Ah sí, estás equivocado, perdés eso a toda prisa. Actualizado. – googletorp

0

Creo que el código dice que si la variable DateTime.now no existe, en su lugar devuelve el resultado de +new Date.

+1

También podría estar diciendo que DateTime.now es '', 0, falso, nulo –

0

El operador || se usa para asignar un valor a $time en el ejemplo.

Si Date.now evalúa como falso, entonces $time tiene asignado el valor en el lado derecho del operador || (en este caso, una función). Si Date.now se evalúa como TRUE, entonces cortos cicuits y asigna el valor de Date.now a $time

17

Ya existe una respuesta aceptada, pero me gustaría mencionar, que el O-operador también se llama predeterminado-operador, porque no devuelve un booleano, sino el argumento de la mano izquierda o derecha.

Igual va para el operador AND, que también se llama guardia-operador.

Salida crockford's Survey of the JavaScript Programming Language para más detalles:

El operador & & se llama comúnmente lógico y. También se lo puede llamar guardia. Si el primer operando es falso, nulo, indefinido, "" (la cadena vacía) o el número 0, entonces devuelve el primer operando. De lo contrario, devuelve el segundo operando. Esto proporciona una manera conveniente de escribir una verificación nula:

var value = p & & p.name;/* El valor del nombre solo se recuperará de p si p tiene un valor, evitando un error. */

The || el operador se llama comúnmente lógico o. También se puede llamar predeterminado. Si el primer operando es falso, nulo, indefinido, "" (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 el valor de v, pero si v no tiene un valor, use 10 en su lugar. */

Cuestiones relacionadas