Javascript eval函数返回八进制值

pan*_*kaj 5 javascript

当我尝试"eval"函数作为eval("020*05 + 05")时,它将返回85而不是105.有人可以解释为什么eval函数的行为如下吗?还建议任何克服这个问题.

Poi*_*nty 7

以零开头的数字常量(如"020")被解释为八进制.这对C,C++,Java,Javascript以及大多数其他任何语言来说都是如此,甚至与C语言有着模糊的美化关系.

如果由于某种原因你确实需要使用"eval()",并且你有这些奇怪的字符串,在数字常量上有伪造的前导零,你可能会尝试这样的事情:

var answer = eval(weirdString.replace(/\b0(\d+)\b/g, '$1'));
Run Code Online (Sandbox Code Playgroud)

但是我希望你能找到一种方法来使用"eval()".(请注意下面的注释,注意上面显示的hack会出现包含小数部分的数字的问题.)

  • 这适用于一个前导零,但是也会删除数字中的零,例如“ 0.001”,变为“ 0.01”。 (2认同)