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

Lar*_*tle 8 javascript

为什么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());
Run Code Online (Sandbox Code Playgroud)

Fré*_*idi 8

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

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


Ric*_*haw 5

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

2.可以强制转换为字符串,这是一个对象(即'2.0'),因此可以有方法.

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

看看如何解析这两个:

在此输入图像描述

VS

在此输入图像描述

生成这些的工具就是这样的:http://jsparse.meteor.com/

  • 那个工具是什么? (3认同)
  • 你能解释一下图表是如何表明第一个是错的吗?两者似乎都在一个数字框中.我无法看到图表如何帮助....你能回复吗? (2认同)

Cas*_*Chu 5

2.toString()
Run Code Online (Sandbox Code Playgroud)

口译员看到2并想到,"哦,一个数字!" 然后,它看到了点,并认为,"哦,一个十进制数!" 然后,它转到下一个角色并看到一个t,它会变得混乱." 2.t它不是一个有效的十进制数字,"它说,因为它会引发语法错误.


2..toString()
Run Code Online (Sandbox Code Playgroud)

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