Javascript で、

1.1.1.toString() #=> 1
なのですが
1.toString() #=> シンタックスエラー
なぜ?

Number.prototype.fooo = function(){ }
1.fooo()

みたいなことをやりたいのですが。不可能なのでしょうか。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/05/15 19:50:43
  • 終了:2014/05/16 00:51:25

ベストアンサー

id:language_and_engineering No.3

lang_and_engine回答回数170ベストアンサー獲得回数632014/05/15 22:22:21

それはECMAScriptの仕様で,よくある話なんですよ。


JavaScript Garden
http://bonsaiden.github.io/JavaScript-Garden/ja/#object.general

  • 良くありがちな誤解として、数値リテラルがオブジェクトとして使用できないというものがあります。この理由としては、JavaScriptパーサーが浮動小数点のドットをドット記法として解釈しようとしてしまうからです。 2.toString(); // シンタックスエラーが発生する 数値リテラルをオブジェクトとして使用する為の回避策がいくつかあります。2..toString(); // 2つ目のドットが正しく解釈される
id:takuya_1st

1..toString() で出来るんですね!勉強になります。

ぱっと見、記述ミスにしか見えないですけど、

1..toString()は、(1).toString() に比べて記述が楽ですね。
積極的に使ってみようと思います。

また、すごく勉強になる参考URLを貼っていただいて、助かりました。ありがとうございます。

2014/05/16 00:51:16

その他の回答(2件)

id:sasada No.1

sasada回答回数1482ベストアンサー獲得回数1332014/05/15 20:09:57

自宅で環境がないので未確認ですが、ピリオド(.)が小数点だと解釈されているのでは。
Number.prototype.fooo = function(){ /* hogehohe */ }
(1).fooo()
としてみては如何でしょうか。

id:takuya_1st

なるほど(1) ですね。(1 )だけで良いんですね。便利です。
(1).loop( function () {} )としてメソッド作りたいと思います。


素早い回答ありがとうございます。

2014/05/15 22:48:34
id:rsc96074 No.2

rsc回答回数4359ベストアンサー獲得回数3982014/05/15 21:55:55

 IEでやってみましたが、次のようになりました。(^_^;

document.write(1.1.1.toString());   // #=> 非表示(真っ白)

document.write((1.1.1).toString()); // #=> 非表示(真っ白)

document.write(1.1.toString());     // #=> 1.1

document.write((1.1).toString());   // #=> 1.1

document.write(1.toString());       // #=> 非表示(真っ白)

document.write((1).toString());     // #=> 1

 ちなみに、Chromeでは、IEで非表示のところは、やっぱり、「SyntaxError: Unexpected number」で、エラーにならなかったところは、コンソールでは、「undefined」で、「1.1」と「1」を表示しました。
 「1.1」に関しては、「1.1」と「(1.1)」のどちらでも、IEとChromeのどちらでも、表示されました。(^_^;

id:takuya_1st

すいません、質問の例が間違えてました。

1.1.toString() //=> "1.1"
1.toString() //=> Syntax Error です。

IEだと、SyntaxErrorにならず、表示真っ白になるんですね。おもしろいです。

素早い回答ありがとうございます。

2014/05/15 22:47:17
id:language_and_engineering No.3

lang_and_engine回答回数170ベストアンサー獲得回数632014/05/15 22:22:21ここでベストアンサー

それはECMAScriptの仕様で,よくある話なんですよ。


JavaScript Garden
http://bonsaiden.github.io/JavaScript-Garden/ja/#object.general

  • 良くありがちな誤解として、数値リテラルがオブジェクトとして使用できないというものがあります。この理由としては、JavaScriptパーサーが浮動小数点のドットをドット記法として解釈しようとしてしまうからです。 2.toString(); // シンタックスエラーが発生する 数値リテラルをオブジェクトとして使用する為の回避策がいくつかあります。2..toString(); // 2つ目のドットが正しく解釈される
id:takuya_1st

1..toString() で出来るんですね!勉強になります。

ぱっと見、記述ミスにしか見えないですけど、

1..toString()は、(1).toString() に比べて記述が楽ですね。
積極的に使ってみようと思います。

また、すごく勉強になる参考URLを貼っていただいて、助かりました。ありがとうございます。

2014/05/16 00:51:16
id:takuya_1st

質問に書いた、例が間違えてました。
1.1.toString() //=> 1.1
1.toString() //=> syntax Error


です。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません