JS能力测评经典题2

2017-05-15  本文已影响0人  这很重要吗

不考虑算法复杂度,用递归做:

function sum(arr) {
    var len = arr.length;
    if(len == 0){
        return 0;
    } else if (len == 1){
        return arr[0];
    } else {
        return arr[0] + sum(arr.slice(1));
    }
}

slice 参数 : slice(start,end);

slice 方法,在string对象和array对象 的用法上类似。

对于数组对象来说,slice 方法提取 从 start下标起 以end下标 为结尾的 一段元素(但不包括end下标的元素),然后返回新的数组,对原数组没有任何是影响,
当start 为0 时, 等于说是 克隆一个新的数组,克隆后 两个数组进行各自的操作,都互不影响

var clone = array.slice(0);
var clone= array.concat();

常规循环:

function sum(arr) {
    var s = 0;
    for (var i=arr.length-1; i>=0; i--) {
        s += arr[i];
    }
    return s;
}

函数式编程 map-reduce:

function sum(arr) {
return arr.reduce(function(prev, curr, idx, arr){
return prev + curr;
});
}

//IE9
array1.reduce(callbackfn[, initialValue])
function callbackfn(previousValue, currentValue, currentIndex, array1)

*******
forEach遍历:

function sum(arr) {
var s = 0;
arr.forEach(function(val, idx, arr) {
s += val;
}, 0);

return s;

};

******
eval:

function sum(arr) {
return eval(arr.join("+"));
};

JavaScript 全局对象的一个函数属性,`eval(string)`函数可计算某个字符串,并执行其中的的 JavaScript 代码

<script type="text/javascript">

eval("x=10;y=20;document.write(x*y)")

document.write(eval("2+2"))

var x=10
document.write(eval(x+17))

</script>
输出:
200
4
27

如果eval()的参数不是字符串,eval()将会将参数原封不动的返回。

eval(new String("2 + 2")); // 返回了包含"2 + 2"的字符串对象
eval("2 + 2"); // returns 4

从[ECMAScript 5](http://www.ecma-international.org/ecma-262/5.1/#sec-10.4.2)起它工作在全局作用域而不是局部作用域中;

function test() {
var x = 2, y = 4;
console.log(eval("x + y")); // 直接调用,使用本地作用域,结果是 6
var geval = eval;
console.log(geval("x + y")); // 间接调用,使用全局作用域,throws ReferenceError 因为x未定义
}

###eval解析JSON###

var dataObj=eval("("+data+")");//转换为json对象

为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

比如JSON.parse(JSON对象解析),比如new Function()(执行特定代码)
上一篇下一篇

猜你喜欢

热点阅读