新增的数组方法:

遍历迭代方法:forEach()、map()、filter()some()、every();

简单来说可以把forEach()看作是增强版的for循环

forEach()语法规范:

// value:数组当前的值
// index:当前值的索引号
// arr:数组对象本身
array.forEach(function(value,index,arr){
    ......
});

简单代码示例:

var arr = [1,4,3,8];
    arr.forEach(function(value,index){
        console.log("值是"+value);
        console.log("索引号是"+index);
    })

filter()语法规范:

// value:数组当前的值
// index:当前值的索引号
// arr:数组对象本身
array.filter(function(value,index,arr){
    ......
});

 filter()方法用于创建一个新数组,新数组中的元素通过检擦指定数组中符合条件的所有元素,主要用于筛选数组,比如选出数组中大于10的,或小于10的。

注意的是它返回的是一个新数组

简单代码示例:

// 把大于10的筛选出来
    var arr = [4,3,8,15,21,90,54];
// filter会不断遍历,把满足条件的内容筛选出来,记住一定要return把结果返回回来
    var newarr = arr.filter(function(value){
        return value >= 10;
    })
    console.log(newarr);

some()语法规范:

// value:数组当前的值
// index:当前值的索引号
// arr:数组对象本身
array.some(function(value,index,arr){
    ......
});

some()方法用于检测数组中的元素是否满足指定条件,也就是查找数组中是否有满足条件的元素,它返回的是布尔值,如果找到返回true,反之返回false

而且some()和filter()不同的是,some()方法是查找满足的元素是否存在,只要找到第一个满足条件的元素后,会终止循环,不再继续查找,返回的是布尔值true/false,而filter()方法是查找所有满足条件的元素,把所有满足条件的元素返回回来。

简单代码示例:

// 数组中有yellow的内容吗
    var arr2 = ["red","green","yellow","black"];
// some()在循环遍历时只要找到了第一个满足的元素yellow,就会返回,不再继续往下找
    var color = arr2.some(function(value){
        return value == "yellow";
    })
    console.log(color);

新增的对象方法:

1.Object.keys() 用于获取对象自身所有的属性。

效果类似for...in,它返回的是一个由属性名组成的数组

语法格式:

Object.keys(obj);

简单代码示例:

<script>
       var Person = {
           name:"Tom",
           age:23,
           sex:"男"
       }
       var per = Object.keys(Person);
       console.log(per); // 得到的是对象中的每个属性名,且以数组形式保存
 </script>

2.Object.defineProperty() 定义新属性或修改原有的属性

语法格式:

// obj 不能省略,目标对象,也就是要给哪个对象修改身上的属性
// prop 不能省略,需要定义或修改的属性名
// descriptor 不能省略,目标属性所拥有的特性,也是最麻烦的一个参数
Object.defineProperty(obj,prop,descriptor);

descriptor参数说明:是以对象形式{}书写的

1.value:设置属性的值 默认undefined

2.writable:值是否可以重写,true/false 默认false(因为有些对象里的值很重要,是不允许被修改的)

3.enumerable:目标属性是否可以被枚举,true/false 默认false

4.configurable:目标属性是否可以被删除或是否可以再次修改特性,true/false 默认false

简单代码示例:

<script>
       var Person = {
           name:"Tom",
           age:23,
           sex:"男"
       }
       // 以前为对象增加属性的方法 修改亦是如此
       Person.like = "跑步";
       // Object.defineProperty() 定义新属性或修改原有的属性
       // 如果设置对象已有的属性那就是修改,没有就是添加
       Object.defineProperty(Person,"address",{
           // 这个值是给的address属性
           value:"北京市通州区xxx镇xxx小区",
           // 不允许address属性被枚举出来 false就是不允许被遍历
           enumerable:false,
           // 不允许address这个属性被删除 且不允许再次修改第三个参数里面的特性
           configurable:false
       })
       Object.defineProperty(Person,"name",{
           // 不允许name属性被重写/修改
           writable:false
       })
       // 对于新加的属性,enumerable默认就是false,不会被遍历出来,根据需要改成true/false
       Object.defineProperty(Person,"love",{
           value:"读书",
           enumerable:true
       })
       Person.name = "Bob";
       // Person的name属性还是Tom,不会被修改
       console.log(Person); 
       // 遍历出来的数据中没有address
       console.log(Object.keys(Person));
       // 删除address这个属性
       delete Person.address;
       // address不会被删除
       console.log(Person);
</script>