空格字符如何更改 JavaScript 中的数字文字?

Nic*_*ick 3 javascript

我们今天偶然发现了这个:

123.toString();
// Uncaught SyntaxError: Invalid or unexpected token
123 .toString();
// "123"
Run Code Online (Sandbox Code Playgroud)

为什么添加空间有效?数字文字是被强制还是强制转换?

我尝试了一些其他测试来阐明一些情况,但我不太明白幕后发生了什么:

let number = 123;
number.toString();
// "123"
Object.prototype.toString.call(123);
// "[object Number]"
Object.prototype.toString.call(123 );
// "[object Number]"
Run Code Online (Sandbox Code Playgroud)

tri*_*cot 7

在第一种语法中,.被解释为小数分隔符(必须与数字相邻)。在这种情况下toString是意外的,并且表示语法错误。

属性点也不会是相邻的,以它遵循的对象。始终允许间隔。所以当你有空间时,就没有歧义了,可以正确解释点。

另一种变体是将点加倍

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

这里的第一个点是小数点分隔符,但后面没有数字(这是数字的有效语法)。第二个点又是属性点。

或者也:

(123).toString()
123.0.toString()
Run Code Online (Sandbox Code Playgroud)

只要您能确保.toString()不能将of 的点解释为数字文字的一部分,它就会按您的预期工作。

并且当您访问基元的属性时,该基元会即时装箱到包装器对象中,以便您实际执行以下操作:

Number(123).toString()
Run Code Online (Sandbox Code Playgroud)