javascript - 空格字符如何改变 JavaScript 中的数字文字?

标签 javascript

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

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/

相关文章:

javascript - 删除 jQuery 文本中 <> 之间的所有内容

php - 单击链接时转到上一个网页

javascript - react 传单和 react 传单绘制

javascript - 打印由 google docviewer 通过 javascript 在 iframe 中打开的 pdf

javascript - 在 Chrome 中绕过 "Confirm Navigation"对话框

javascript - AngularJS + IndexedDB,一次打开数据库供所有 Controller 使用,还是为每个请求单独打开?

javascript - 使用页面上的专用按钮复制的文本包含大量空格

javascript - 如何刷新 AngularJs Kendo Grid?

javascript - 带有嵌套流的 flatMapConcat

javascript - Bootstrap 带弹出窗口的大 table