私は JS を使い始めて以来、数値リテラルで関数を呼び出す唯一の方法は、次のようにかっこで囲んで式の位置に置くことだと考えていました。
1.toString();
// SyntaxError: identifier starts immediately after numeric literal
(1).toString();
// "1"
今日、これを試してみることにしました:
0.1.toString();
// "0.1"
なぜこれが機能するのですか?公式仕様へのポインタは素晴らしいでしょう。
Edit Ambiguity は私の最初の考えでしたが、1.toString()
どちらにもあいまいさはないと判断しました。最初に思ったよりも深いですが、それでも自分は正しいと思います。理由は次のとおりです。
プロパティ名は数字で始めることができます
var obj = { "1" : 1, "2" : 2 };
数字で始まるプロパティ名は、角括弧でのみ参照できます
obj.1;
// SyntaxError: Unexpected token ILLEGAL
obj['1'];
// 1
また:
1['toString']();
// '1'
したがって、1.
数字以外の後に続くのは、常にメソッド呼び出しまたはプロパティ アクセスであり、決して 10 進数ではありません。同様に、1.
数字が続く場合は常に 10 進数であり、メソッド呼び出しやプロパティ アクセスではありません。