2010-02-19 26 views
13
<script> 
1..z 
</script> 

Esto da ningún error de sintaxis o de tiempo de ejecución. Parece que el número y el nombre de la variable pueden ser cualquier otro (123..qwerty). Me pregunto qué significa esta declaración.¿Qué significa `1..something` en JavaScript?

Respuesta

33

Es no un rango, la expresión 1..z se devuelva undefined.

¿Por qué?

El primer punto termina una representación de un Numeric Literal, que le da una primitiva Number:

var n = 1.; 

La gramática de un literal numérico se expresa así:

DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt 

Como se puede ver la DecimalDigits parte después del punto es opcional (sufijo opt).

El segundo punto es el acceso a la propiedad, se tratará sólo para obtener la propiedad z, que es undefined, ya que no existe en el objeto Number.prototype:

1..z; // undefined 
1..toString(); // "1" 

es equivalente a tener acceso a una propiedad con el acceso a la propiedad de notación de corchetes:

1['z']; // or 
1['toString'](); 
+1

gracias por desactivar la información errónea – spender

+0

Awesome answer. – Nicole

+0

Gracias! Muy buena explicación. – Roman

5

La combinación de estos:

alert(1.foo); // --> parse error 
alert(1.4.foo); // --> undefined - number 1.4 doesn't have the property foo 
alert(1.); // --> 1 (?) 

a la conclusión:

alert(1..foo); // --> undefined