2011-01-24 5 views

答えて

8

.は演算子です。 2は数字です。 xはプロパティ名として扱われます。

浮動小数点数値定数には、スペースを埋め込んではいけません。したがって、2 .xは、定数2をNumberオブジェクトに昇格させるための式で、「x」というプロパティが調べられます。 1つもありませんので、値はundefinedです。

あなたは

alert("Hello".x); 

はやや類似していることを

alert((2).x); 

注意をもう少し明示的に同じ効果を得ることができます。その場合には、それは数値定数ではありません、それは文字列です定数。文法的な面白いビジネスは関係ないので、それほど特有なことではありませんが、それ以外の場合、通訳者は評価の際に同様のことを行います。文字列定数は最初にStringオブジェクトに変換され、次に "x"プロパティが取得されます。

編集 —少しを明確にするには、2.xは、識別子「X」に続くそれは数値定数(「2」)として解析されているため、エラーになり、それは構文エラーです。間にある演算子を使用せずに隣り合って配置された2つの値は、その言語でどのような種類の構文も構成しません。

+0

バーマン。よく目撃された。これはそれを証明します: 'Number.prototype.x ="こんにちは "; alert(2 .x); ' – mplungjan

+0

論理的な拡張によって' alert(2 .valueOf()); 'は" 2 "を警告します! Hehe! –

+0

しかしこれはしません: 'Number.prototype.x = 'bla'; alert(2 [x]); ' – mplungjan

関連する問題