我在使用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
有人可以向我解释为什么在变量t上附加到4567的0会导致答案为4846。
答案 0 :(得分: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版本替换所有数字。请注意,需要修改解决方案以适用于小数或负数。
答案 1 :(得分:0)
在Javascript中,数字前缀为0被视为八进制。
以下是八进制数的例子:
01234,-077 0312
正八进制数必须以0(零)开头,后跟八进制数字 负八进制数必须以-0开头,后跟八进制数字。
你可以克服使用
var t = "(4.4 / 2.2) * Number(04567)";