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