Javascript权威指南核心参考笔记(一)
核心参考笔记很长,我会分多个部分来记录。
arguments[] 函数参数数组
arguments.callee 指当前正在执行的函数(通过它可以引用匿名函数自身)
var factorial = function(x){
if(x<2) return 1;
else return x*arguments.callee(x-1);//调用自身
}
var y = factorial(5); //120
arguments.length 传递给函数的参数个数,以及Arguments对象中数组元素的个数
function check(args){
console.log(args);//[1,2]
var actual = args.length;//2
var expected = args.callee.length;//3
if(actual != expected){
throw new Error("参数个数有误:期望值:"+
expected + ";实际值:"+ actual);
}
}
//演示如何使用check()方法的实例函数
function f(x,y,z){
check(arguments);
return x+y+z;
}
f(1,2);
Array 数组
方法
Array.concat() 把元素衔接到数组中,返回新数组。
var a = [1,2,3]; var b = a.concat(4,5); console.log(a) //[1,2,3] console.log(b) //[1,2,3,4,5]
Array.every() 测试断言函数是否对每个元素为真
[1,2,3].every(function(x){ return x < 5 }) // true 所有元素都
Array.filter() 返回通过断言的元素的新数组
[1,2,3].filter(function(x){return x > 1;}); //[2,3]
Array.forEach() 为每一个数组元素调用一个函数,无返回值。
var a = [1,2,3];
a.forEach(function(x,i,a){
a[i]++;
console.log(x,i,a);
});
//输出:
//1 0 [2, 2, 3]
//2 1 [2, 3, 3]
//3 2 [2, 3, 4]
Array.indexOf() 查找数组
返回匹配元素的位置,不匹配则返回-1
['a','b','c'].indexOf('b') // 1
['a','b','c'].indexOf('d') // -1
['a','b','c'].indexOf('a',1) // -1
Array.lastIndexOf() 反向查找数组
等同于indexOf(),从数组最后一个元素开始查找
Array.join() 将数组元素衔接为字符串
var a = new Array(1,2,3,"ming");
var s = a.join("+"); //s = "1+2+3+ming";
Array.length 数组长度
Array.map() 从数组元素中计算新值,返回新数组。
[1,2,3].map(function(x){return x*x}); //[1,4,9]
Array.pop() 移除并返回数组的最好一个元素
var stack = [1,2,3]; var arr2 = []; stack.pop(); //stack:[1,2] 返回: 3 arr2.pop(); //stack:[] 返回:undefined
Array.push 给数组追加元素,返回新数组长度
var stack = [1,2]; stack.push(3,4) //stack:[1,2,3,4] 返回:4
Array.reduce 从数组元素中计算出一个新值,返回计算后的值
var stack = [1,2];
stack.reduce(function(x,y){console.log(x,y); return x*y},9) //返回:216
/*计算过程
*9 1
*9 2
*18 3
*54 4
*216
*/
Array.reduceRight 从右到左缩减数组,返回计算后的值,用法同上
Array.reverse() 颠倒数组中的元素顺序
var stack = [1,2,3]; stack.reverse(); //stack:[3,2,1]
Array.shift() 移除数组的第一个元素,返回被移除的元素
var stack = [1,2,3]; stack.shift(); //stack:[2,3] 返回:1