JS 包装器对象奇怪的行为

JS wrapper objects strange behaviour

有人可以解释下面的行为吗,它是关于 JS 中的临时包装对象,但是当我尝试在数字文字上使用它们时,它们失败了。是我弄错了还是最近改了,我试过 V8 和 Gecko,同样的故事。

    'stringWrapper'.charAt(0);
    "s"
    1.toString();
    VM8363:2 Uncaught SyntaxError: Unexpected token ILLEGAL(…)InjectedScript._evaluateOn @ VM8253:875InjectedScript._evaluateAndWrap @ VM8253:808InjectedScript.evaluate @ VM8253:664
    typeof 1
    "number"
    (1+0).toString();
    "1"
    typeof (1+0)
    "number"

这是 "feature" JavaScript 和其他动态类型语言(如 Python)中的一个有趣的地方,您可以在其中调用方法或访问整数的属性。

实际发生的情况是引擎将 1.toString() 视为浮点数,其中 toString() 部分是第一个小数点所在的位置。

解决方法是双点 1..toString() 并省略尾随小数点或将数字括在括号 (1).toString() 中以评估数字,然后调用 toString结果。

更有趣的JavaScript事情:1 .toString()有效! 1. toString() 不是。

您可能会喜欢 Kyle Simpson's video 奇怪的 JavaScript 怪癖