新增的数组方法:
遍历迭代方法: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>