【问题标题】:JS wrapper objects strange behaviourJS包装对象奇怪的行为
【发布时间】:2015-11-23 00:50:29
【问题描述】:

有人可以解释下面的行为,它是关于 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"

【问题讨论】:

    标签: javascript v8 gecko


    【解决方案1】:

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

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

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

    【讨论】:

    • 嘿,这很有趣,是的,也许我看到这在 python 而不是 JS 中没有问题 :)。双点也可以 :) 谢谢
    • 它在 Python 中不起作用。尝试在 Python 中评估 1.real。你会得到一个语法错误,要么是双点,要么是用括号括起来,但可惜它在 Ruby 中可以正常工作。
    【解决方案2】:

    更多有趣的 JavaScript 东西:1 .toString() 是有效的! 1. toString() 不是。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 2014-03-14
      • 2020-07-18
      • 2010-12-06
      • 1970-01-01
      相关资源
      最近更新 更多