我们今天偶然发现了这个:
123.toString();
// Uncaught SyntaxError: Invalid or unexpected token
123 .toString();
// "123"
为什么添加空间有效?数字文字是被强制还是强制转换?
我尝试了一些其他测试来阐明一些信息,但我不太明白幕后发生了什么:
let number = 123;
number.toString();
// "123"
Object.prototype.toString.call(123);
// "[object Number]"
Object.prototype.toString.call(123 );
// "[object Number]"
最佳答案
在第一种语法中,.
被解释为小数分隔符(必须与数字相邻)。在这种情况下,toString
是意外的,表示语法错误。
属性点确实不必须与它所跟随的对象相邻。始终允许间距。所以当你有空间的时候,就没有歧义了,点就可以正确解释了。
另一种变体是将点加倍:
123..toString()
这里的第一个点是小数点分隔符,但后面没有数字(这是数字的有效语法)。第二个点又是属性点。
也可以:
(123).toString()
123.0.toString()
只要您可以确保 .toString()
的点不能被解释为数字文字的一部分,它就会按您的意愿工作。
当你访问一个基元的属性时,这个基元被即时装箱到一个包装器对象中,所以你实际上是这样做的:
Number(123).toString()
关于javascript - 空格字符如何改变 JavaScript 中的数字文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59584168/