当我尝试将“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'));
不过,我希望您能找到一种使用“eval()”的方法。 (请注意下面的评论,上面显示的 hack 将在包含小数部分的数字上出现问题。)
关于返回八进制值的 Javascript eval 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523779/