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

Ceci ne provoque aucune erreur de syntaxe ou d'exécution. On dirait que le nombre et le nom de la variable peuvent être n'importe quel autre (123..qwerty). Je me demande ce que signifie cette déclaration?Que signifie «1.quelque chose» en JavaScript?

Répondre

33

est-pas une gamme, l'expression 1..z retournera simplement undefined.

Pourquoi?

Le premier point met fin à une représentation d'un Numeric Literal, vous donnant une Number primitive:

var n = 1.; 

La grammaire d'un littérales numérique est exprimé comme ceci:

DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt 

Comme vous pouvez le voir La partie DecimalDigits après le point est facultative (suffixe opt).

Le second point est l'accesseur de la propriété, il va essayer seulement d'obtenir la propriété z, qui est undefined parce qu'il n'existe pas sur l'objet Number.prototype:

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

équivaut à accéder à une propriété avec l'accesseur de propriété notation de parenthèse:

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

merci d'avoir désamorcé la désinformation – spender

+0

Réponse impressionnante. – Nicole

+0

Merci! Très bonne explication. – Roman

5

Combiner ces:

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

à la conclusion:

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