2012-05-05 46 views
15

Duplicar posible:
What does the || operator do?¿Qué significan dos líneas verticales en un valor de objeto en javascript?

Tal vez alguien puede proporcionar una mejor fragmento de código, pero lo que sí significa || en el siguiente ?:

var time = $(el).data('start') || new Date(); 

¿Es una or operador y si es así, ¿cómo tiene sentido que una variable pueda tener dos valores diferentes?

+0

hi @Esailija, gracias por esta referencia. –

+0

La acción que esperaba que hicieras fue eliminar esta pregunta, ya que no es diferente de la ya solicitada y respondida. – Esailija

+1

Busqué en Google para encontrar algo similar al enlace que mencionaste pero no pude encontrar nada usando palabras clave como "dos, javascript de doble línea vertical". Como no había mucho allí en inglés sencillo, decidí hacer la pregunta. –

Respuesta

33

Este es un operador OR. Lo que necesita comprender es:

  • Los valores no booleanos se convierten en booleanos cuando se utilizan en un operador lógico. Los valores que se convierten a false se llaman "falsy" y los valores que se convierten a true se llaman "truthy". Los valores de Falsy incluyen cosas como 0, undefined, null, y así sucesivamente. Ver más en Truthy and Falsy: When All is Not Equal in JavaScript.

  • Los OR operador cortocircuitos: se mantiene la evaluación de expresiones hasta que encuentre el que es true, y luego se detiene.

Así, var time = $(el).data('start') || new Date(); significa "establecer time a los datos start del elemento el, o, si eso es Falsy, utilice la hora actual".

+0

Hola @apsillers, gracias por la explicación de "falsy" y "truthy". Los escuché antes, pero nunca supe lo que querían decir. –

+0

Simple y directo al grano - excelente respuesta. – Yatrix

5

Significa 'o'. En este caso, asigna el valor de $(el).data('start') a la variable time o, si no existe o en su lugar devuelve false, asigna en su lugar el valor devuelto por new Date(). O bien, como se ha señalado más claramente por Malovolio, en los comentarios:

... si es $(el).data('start') "Falsy" (es decir, no definido, NULL, 0, falsa, una cadena vacía, o NaN), entonces es new Date() evaluado y asignado a time.

El aspecto importante de un operador lógico:

operadores lógicos se utilizan típicamente con valores booleanos (lógicos); cuando lo son, devuelven un valor booleano. Sin embargo, el & & y || los operadores realmente devuelven el valor de uno de los operandos especificados, por lo que si estos operadores se usan con valores no booleanos, pueden devolver un valor no booleano.

Referencias:

+0

gracias @David, muy útil. ya lo pillo. –

+1

Más exactamente, si '$ (el) .data ('start')' es "falsy" (es decir, indefinido, nulo, 0, falso, una cadena vacía, o 'NaN'), entonces' nueva Fecha() 'se evalúa y se asigna a' tiempo'. Extrañamente, las listas vacías y los objetos vacíos no se consideran falsos. – Malvolio

-1

Significa logical sum. var time = $(el).data('start') || new Date(); si $(el).data('start') tendrá undefined o false valor entonces time tendrá el valor de la función new Date.

+0

gracias @Denis. ¿cómo es 'logical suma' diferente de' o'? –

+1

Para los detractores, ¿qué está mal escrito? –

+0

¿por qué esta respuesta fue downvoted? –

1

La forma en que el operador || se evalúa es que si la primera parte es verdadera-ish, la devolvió. Si la primera parte es falsa, devuelve la segunda. por lo tanto las expresiones anteriores es equivalente a:

if ($(el).data('start')) { 
    time = $(el).data('start'); 
} else { 
    time = new Date(); 
} 
5
exp1 || exp2 

evalúa exp1. Si exp1 es verdadero, no se evalúa exp2 (conocido como evaluación de cortocircuito). Si exp1 devuelve falso, se evalúa exp 2. Si exp1 O exp2 es verdadero, entonces (exp1 || exp2) se evalúa como verdadero.

Pero en Javascript, puede establecer valores utilizando el operador.

a = something 

if (prop) 

a = prop 

puede reescribirse como

a = prop || something 
Cuestiones relacionadas