当我尝试"eval"函数作为eval("020*05 + 05")时,它将返回85而不是105.有人可以解释为什么eval函数的行为如下吗?还建议任何克服这个问题.
以零开头的数字常量(如"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会出现包含小数部分的数字的问题.)
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |