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