在 JavaScript 里慰安,Number 類型有很多方法涩澡,包括 toString()、toFixed() 等等腾么,通常調(diào)用時都會先定義一個變量,例如
var num = 2;
num.toString(); // "2"
但是如果直接用2.toString(),就會拋出一個異常:“Uncaught SyntaxError: Invalid or unexpected token”杈湾。以前我一直以為是數(shù)字字面量不能調(diào)用方法解虱,也沒有去深究,今天看到網(wǎng)站別人博客上用2..toString()寫法能正常運行并得出正確結(jié)果漆撞,才仔細查看了下原因:
之所以會報錯殴泰,是因為在這里的 . 發(fā)生了歧義于宙。它既可以理解為小數(shù)點,也可以理解為對方法的調(diào)用艰匙,問題就出在這里限煞,我們想要后一種理解,而實際上员凝,因為這個點緊跟于一個數(shù)字之后署驻,按照規(guī)范,解釋器就把它判斷為一個小數(shù)點健霹。我們也可以看下拋出的異常信息:“標(biāo)識符緊跟于一個數(shù)字字面量之后旺上。”說明 2.toString() 在解釋器看來其實是:
(2.)toString();
所以只要再加上一個點就可以了:2..toString()糖埋,第一個點是數(shù)字的一部分宣吱,2. 被自動解釋為整數(shù)值 2,而第二個點則是調(diào)用方法瞳别。
下面幾種寫法也是可行的:
(2).toString();
2 .toString(); //加個空格
2.0.toString();
拋出異常僅限于數(shù)字是整數(shù)的情況征候,如果數(shù)字本身就含有小數(shù)點,比如 2.6.toString() 祟敛,是完全正常的疤坝。