不得不说的eval方法

今天在处理数据的时候碰到这样一个问题,接口过来的数据是一个数字字符串(是数字但是类型是字符串)数组,这些字符串呢又是数字,现在想做的就是将这个数组里面的所有字符串进行相加。一开始想到的是这样做的:

1
2
3
4
5
6
var str_array = ['12','45', '56'];
var int_array = str_array.map(function(value){return parseInt(value)}); //return a array [12,45, 56]
var total = 0;
for (var i = 0; i < int_array.length; i++) {
total += int_array[i];
}

对一个数组进行求和一定要做for循环,作为一个ruby语言的爱好者,直觉告诉我应该还没有简单的方法呢?完全可以不用循环,可以这样:

1
2
3
var total = 0;
var str_array = ['12','45', '56'];
str_array.map(function(value){ total += parseInt(value) });

感觉是不是要爽一些呢?但是还有没有更简洁的方式呢?当一段代码你感觉能优化时,那肯定可以优化的,看看下面这个版本:

1
2
var str_array = ['12','45', '56'];
var total = eval(str_array.join('+'));

是不是觉得想说,这太帅气了。

eval 看上去貌似很简单的样子, 这样调用就可以了eval(string), 其实它很强大的。那有为什么我们很少在开源的代码中看到它的身影,至于原因,也归功于它太强大了,强大的东西虽好,但是一般人很难驾驭的,用不好呢就会适得其反, 所以很多的文章建议不要用它, 例如这里有一篇03年的文章Eval is Evil,但是大牛Payin’ Bills最近写了 写了一篇文章说eval() isn’t evil, just misunderstood, 说到底呢,用的好不好还是看用得人,强大的东西都建议不要用得它负责,也就做做上面这样的就差不多了^_^…

###eval 详细的用法参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval