为什么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());
答案 0 :(得分:8)
这是因为2.
被解析为2.0
,因此2..toString()
相当于2.0.toString()
,这是一个有效的表达式。
另一方面,2.toString()
被解析为2.0toString()
,这是语法错误。
答案 1 :(得分:5)
2
只是一个数字,它没有任何方法可以调用。
2.
可以强制转换为一个字符串,即一个对象(即'2.0'
),因此可以使用该方法。
只需将2.toString()
解析为2.0tostring()
,这当然没有意义。
看看两者是如何解析的:
VS
顺便说一下,生成这些工具的工具是: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.);
将被给予:数字