8

为什么2..toString()返回22.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());
4

5 回答 5

8

那是因为2.被解析为2.0,所以2..toString()等价于2.0.toString(),这是一个有效的表达式。

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

于 2013-03-17T08:12:17.037 回答
6

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

2.可以被强制转换成一个字符串,它是一个对象(即'2.0'),因此可以拥有该方法。

Just2.toString()将被解析为2.0tostring(),这当然没有意义。

看看两者是如何解析的:

在此处输入图像描述

对比

在此处输入图像描述

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

于 2013-03-17T08:14:05.567 回答
5
2.toString()

口译员看到2并想,“哦,一个数字!” 然后,它看到点并想:“哦,一个十进制数!” 然后,它转到下一个字符并看到 a t,它会感到困惑。“2.t不是一个有效的十进制数,”它说,因为它会引发语法错误。


2..toString()

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

于 2013-03-17T08:18:48.690 回答
2

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

由于 Number 对象覆盖了 Object 对象的 toString 方法,因此您首先必须明确使用括号来表明它是一个数字,而不是一个对象。

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

于 2013-03-17T08:15:46.907 回答
1

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

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

于 2013-03-17T08:15:07.917 回答