欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES5总结(持续更新)

程序员文章站 2022-07-05 23:22:49
...

参考-

《javascript高级程序设计》
《javascript权威指南》
MDN

1 ES5 数组方法

大多数ES5数组方法第一个参数是一个函数,第二个参数是可选的,如果有第二个参数则第一个参数被看做是第二个参数的方法,也是说调用函数时传递进去的第二个参数作为它的this关键值(如果传this的话,需要注意一下箭头函数绑定作用域的问题)

1. Array.prototype.forEach方法
var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) { 
// element: 指向当前元素的值
 // index: 指向当前索引
 // array: 指向Array对象本身 
alert(element);
});
//set与Array类似,但Set没有索引,因此回调函数的前两个参数都是元素本身:
//Map的回调函数参数依次为value、key和map本身:

高阶函数 用函数做参数或返回一个函数。

2. Array.prototype.map

map是定义在array上的方法,map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

function pow(x) { 
    return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
3. Array.prototype.filter

filter是定义在array上的方法,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素
在一个Array中,删掉偶数,只保留奇数,可以这么写:

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
 return x % 2 !== 0;
});
r; // [1, 5, 9, 15]

把一个Array中的空字符串删掉,可以这么写:

var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) { 
return s && s.trim(); // 注意:IE9以下的版本没有trim()方法});
r; // ['A', 'B', 'C']
4. Array.prototype.every

every方法是用来判断数组中所有的元素调用判断函数都返回true的时候它才返回true

var arrT = [1,2,3,4,5,6,7],
    bool = arrT.every(function(v) {
    console.log(1);
    return v<10;
});
console.log(bool);
//7个1 一个true
//假设有一个元素条件不成立则遍历结束返回false
var arrF= [1,2,11,4,5,6,7],
    bool = arrF.every(function(v) {
    console.log(1);
    return v<10;
});
console.log(bool);
//3个1 一个false
5. Array.prototype.some

some和every方法差不多,它是数组中有一个元素调用判断函数返回true时就返回true,若第一个条件真则停止遍历直接返回true

6. Array.prototype.reduce

reduce方法使用指定的函数将数组元素进行组合,生成单个值

    var arr = [1,2,3,4,5,6,7],
    bool = arr.reduce(function(x,y) {
        console.log(x);
        return x+y;
    });
    console.log(bool);
/*
1
 3
 6
10
15
 21
 28*/

这个方法和其他方法有些不同,它第一个参数没什么变化还是一个函数,但此函数第一个参数为是目前为止累计的结果就如同上面的1、3、6·····,2~4 个参数对应之前的1~3 :元素、元素索引、数组本身。此方法第二个参数也不是this了,而是累计结果的初始值不传的话默认为第一个元素、元素值为第二个元素。

7. Array.prototype.reduceRight

它和reduceRight的区别是一个从左往右,一个从右往左算

8. Array.prototype.indexOf

查询元素在数组的索引号,查不到返回-1,查到返回找到的第一个元素的索引

var arr = [1,2,3,4,5,3,7];
console.log(arr.indexOf(3));
console.log(arr.indexOf(3,4));
//2 5

第二个参数用来指定在哪里开始搜索,不指定默认从头开始

9. Array.prototype.lastIndexOf

和indexOf的区别是 一个从左边开始找、一个从右边

10. Array.isArray

isArray是Array的一个静态方法它用来判断一个对象是不是数组

//  案例来自mdn
// 下面的函数调用都返回 true
Array.isArray([]);
Array.isArray([1]);
Array.isArray(new Array());
// 鲜为人知的事实:其实 Array.prototype 也是一个数组。
Array.isArray(Array.prototype); 

// 下面的函数调用都返回 false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(17);
Array.isArray('Array');
Array.isArray(true);
Array.isArray(false);
Array.isArray({ __proto__: Array.prototype });

2 ES5对象

1.Object.keys

Object.keys接收一个参数,这个参数是一个对象,它返回一个数组,数组元素为对象(参数)自身的所有可枚举的属性名

var obj = {a:"lkx",age:18};
console.log(Object.keys(obj));
//["a","age"]
2.Object.getOwnPropertyNames

Object.getOwnPropertyNames和Object.keys方法类似、只不过它也会把不可枚举的属性返回

var obj =["凯旋哥哥好帅呀!","是的呢!"];
console.log(Object.getOwnPropertyNames(obj));
//["0","1","length"]