为什么2..toString()有效?

时间:2013-03-17 08:08:17

标签: javascript

为什么2..toString()会返回2,但2.toString()会引发此错误?

示例:

console.log(2..toString()); // prints 2

// Firefox throws the error
// `SyntaxError: identifier starts immediately after numeric literal`
console.log(2.toString());

var x = 2;
console.log(x.toString()); // prints 2

// Firefox throws the error
//`TypeError: XML descendants internal method called on incompatible Number`
console.log(x..toString());

5 个答案:

答案 0 :(得分:8)

这是因为2.被解析为2.0,因此2..toString()相当于2.0.toString(),这是一个有效的表达式。

另一方面,2.toString()被解析为2.0toString(),这是语法错误。

答案 1 :(得分:5)

2只是一个数字,它没有任何方法可以调用。

2.可以强制转换为一个字符串,即一个对象(即'2.0'),因此可以使用该方法。

只需将2.toString()解析为2.0tostring(),这当然没有意义。

看看两者是如何解析的:

enter image description here

VS

enter image description here

顺便说一下,生成这些工具的工具是:http://jsparse.meteor.com/

答案 2 :(得分:5)

2.toString()

翻译看到2并认为,“哦,一个数字!”然后,它看到了点,并认为,“哦,一个十进制数!”然后,它转到下一个字符并看到t,它会混淆。 “2.t不是有效的十进制数,”它说,因为它会引发语法错误。


2..toString()

翻译看到2并认为,“哦,一个数字!”然后,它看到了点,并认为,“哦,一个十进制数!”然后,它看到另一个点,并认为,“哦,我想这是我们数字的结束。现在,我们正在查看这个对象的属性(数字2.0)。”然后,它调用toString对象的2.0方法。

答案 3 :(得分:2)

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toString

当Number对象覆盖Object对象的toString方法时,首先必须明确使用paranthesis来指示它是一个数字,而不是一个对象。

我的猜测是2.隐式地将它定义为一个浮点数,然后它可以使用Number对象的.toString()方法,而不是Object对象的方法。

答案 4 :(得分:1)

2..toString()将被解释为2.0.toString()

实际上,2.是一个数字:console.log(typeof 2.);将被给予:数字