0

我在使用 eval 执行此安全操作时遇到了一些问题。

var s = "(4.4 / 2.2) * 4567";
alert(eval(s)); // gives 9134

var t = "(4.4 / 2.2) * 04567";
alert(eval(t)); //gives 4846

有人可以向我解释为什么附加到 var t 上的 4567 的 0 导致答案为 4846。

4

2 回答 2

1

Javascript 将从零开始的数字解释为八进制。所以以 8 为底的 04567 是以 10 为底的 2423。

您可以尝试使用正则表达式来删除零或使用外部库来解析表达式。

这将是一种方式,例如:

var expression = "(4.4 / 2.2) * 04567".replace(/\d+/g, function(val){
     return parseInt(val, 10)
});
alert(eval(expression));

该代码将所有数字替换为以 10 为底的版本。请注意,需要修改解决方案以适用于小数或负数。

于 2013-08-27T12:19:45.847 回答
0

在 Javascript 中,数字中的前缀 0 被视为八进制。

以下是八进制数的示例:
01234, -077 0312
正八进制数必须以 0(零)开头,后跟八进制数字。
负八进制数必须以 -0 开头,后跟八进制数字。

你可以克服使用

var t = "(4.4 / 2.2) * Number(04567)";
于 2013-08-27T12:23:57.697 回答