次のJavaScriptコードで何が起こっている:このかなり独特のJavaScriptシンタックス
alert(2 .x);
アラート '未定義'(ここではそれを参照してください。http://jsfiddle.net/Rp4wk/)
(注: '2' の間のスペースをと'.x'が意図されています)
簡単な質問:なぜですか?特に、次のような構文エラーが発生した場合:
alert(2.x);
alert(2. x);
誰でも?
次のJavaScriptコードで何が起こっている:このかなり独特のJavaScriptシンタックス
alert(2 .x);
アラート '未定義'(ここではそれを参照してください。http://jsfiddle.net/Rp4wk/)
(注: '2' の間のスペースをと'.x'が意図されています)
簡単な質問:なぜですか?特に、次のような構文エラーが発生した場合:
alert(2.x);
alert(2. x);
誰でも?
.
は演算子です。 2
は数字です。 x
はプロパティ名として扱われます。
浮動小数点数値定数には、スペースを埋め込んではいけません。したがって、2 .x
は、定数2
をNumberオブジェクトに昇格させるための式で、「x」というプロパティが調べられます。 1つもありませんので、値はundefined
です。
あなたは
alert("Hello".x);
はやや類似していることを
alert((2).x);
注意をもう少し明示的に同じ効果を得ることができます。その場合には、それは数値定数ではありません、それは文字列です定数。文法的な面白いビジネスは関係ないので、それほど特有なことではありませんが、それ以外の場合、通訳者は評価の際に同様のことを行います。文字列定数は最初にStringオブジェクトに変換され、次に "x"プロパティが取得されます。
編集 —少しを明確にするには、2.x
は、識別子「X」に続くそれは数値定数(「2」)として解析されているため、エラーになり、それは構文エラーです。間にある演算子を使用せずに隣り合って配置された2つの値は、その言語でどのような種類の構文も構成しません。
バーマン。よく目撃された。これはそれを証明します: 'Number.prototype.x ="こんにちは "; alert(2 .x); ' – mplungjan
論理的な拡張によって' alert(2 .valueOf()); 'は" 2 "を警告します! Hehe! –
しかしこれはしません: 'Number.prototype.x = 'bla'; alert(2 [x]); ' – mplungjan