我在使用 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。
我在使用 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。
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 为底的版本。请注意,需要修改解决方案以适用于小数或负数。
在 Javascript 中,数字中的前缀 0 被视为八进制。
以下是八进制数的示例:
01234, -077 0312
正八进制数必须以 0(零)开头,后跟八进制数字。
负八进制数必须以 -0 开头,后跟八进制数字。
你可以克服使用
var t = "(4.4 / 2.2) * Number(04567)";