JS包装器对象的奇怪行为

时间:2015-11-23 00:50:29

标签: javascript v8 gecko

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

更有趣的JavaScript内容:var element = document.getElementById('element); 有效! 1 .toString()不是。

您可能会在奇怪的JavaScript怪癖中享受Kyle Simpson's video