这个表达式有替代eval()吗?

时间:2016-03-21 22:34:25

标签: javascript eval

我有一个像这样的字符串表达式:"1+2+3",它必须保持为字符串。换句话说,循环和转换数字以执行操作不是一个选项,所以我的解决方案是eval("1+2+3")。但是eval()很慢并且所有这些问题都与之相关。有评估我的字符串的替代方法吗?

2 个答案:

答案 0 :(得分:2)

评估字符串不仅,而且危险。如果由于恶意用户意图或错误,您最终会评估崩溃程序的代码,破坏您的数据会打开安全漏洞怎么办?

不,你不应该eval()字符串。你应该将它拆分,将操作数转换为数字,然后求它们。

如果您愿意,可以保留string(您说您需要字符串),但使用string实际执行此操作是真的不好主意

var string = "1+2+3"
var numbers = string.split('+').map(function(x) { return parseInt(x) })
var sum = numbers.reduce(function(total, x) { return total + x }, 0)

答案 1 :(得分:0)

这是一个愚蠢的问题:

var reducer = function (a, b) { 
    return +a + +b; 
};

"1+2+3".match(/[+-]?\d+/g).reduce(reducer); // 6

// or addition only
"1+2+3".split(/\D/).reduce(reducer); // 6