2015-11-23 89 views
1

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

'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" 

回答

1

这是在JavaScript等动态类型语言,如Python,在那里你可以调用一个整数的方法或访问属性了一个有趣的“功能”。

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

解决方法是双击它,1..toString()并省略尾随小数或将括号中的数字包围在括号(1).toString()中以评估该数字,然后对结果调用toString

+0

嘿这个有趣的,是的,也许我看到的,没有任何问题这个工作在Python不是JS :)。双点也有效:)谢谢 –

+0

它不会在Python中工作。尝试在Python中评估'1.real'。你会得到一个语法错误,或者双点或者括起来,但是它可以在Ruby中正常工作。 –

0

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

您可以奇怪的JavaScript享受Kyle Simpson's video怪癖