文章目录
ES5 中给我们新增了一些方法,可以很方便的操作数组或者字符串,这些方法主要包括:
- 数组方法
- 字符串方法
- 对象方法
- 接下来我们一一进行讲解。
一、数组方法
迭代(遍历)方法:forEach()
、map()
、filter()
、some()
、every()
;
1、forEach()
语法:
array.forEach(function(currentValue, index, arr))
- currentValue:数组当前项的值
- index:数组当前项的索引
- arr:数组对象本身
如下面的例子:有一个数组,现在我们想要得到这个数组的每一个元素和索引号,并且得到该数组和该数组中元素之和,我们可以采用如下方法:
var arr = [1,2,3,4]
var sum = 0;
arr.forEach(function(value,index,array){
console.log('数组元素为:'+value);
console.log('每个数组元素的索引为:'+index);
console.log('数组元素为:'+array);
sum += value;
})
console.log('数组元素的和为:'+sum);
打印的结果为:
2、filter()
filter()
方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组它直接返回一个新数组。
语法:
array.filter(function(currentValue, index, arr))
- currentValue: 数组当前项的值
- index:数组当前项的索引
- arr:数组对象本身
举例说明:
返回一个数组中大于15的新数组。
var arr = [13,22,33,4,7,8,16]
var newArr = arr.filter(function(value,index,array){
return value >= 15;
})
console.log(newArr);
打印结果为:
3、some()
some()
方法用于检测数组中的元素是否满足指定条件. 即查找数组中是否有满足条件的元素 。它返回值是布尔值, 如果查找到这个元素, 就返回true
, 如果查找不到就返回false
。如果找到第一个满足条件的元素,则终止循环. 不在继续查找。
语法:
array.some(function(currentValue, index, arr))
- currentValue: 数组当前项的值
- index:数组当前项的索引
- arr:数组对象本身
例如,判断一个数组中是否有大于20的元素存在。
var arr = [13,22,33,4,7,8,16]
var s = arr.some(function(value){
return value > 20;
})
console.log(s);
打印结果为:
查找一个数组中的某元素是否存在。
var arr1 = ['x','y','z','m','n','o']
var x = arr1.some(function(value){
return value = 'x';
})
console.log(x);
打印结果为:
二、字符串方法
1、trim()
trim()
方法会从一个字符串的两端删除空白字符。trim()
方法并不影响原字符串本身,它返回的是一个新的字符串。
语法:
str.trim()
例如:现在有一个字符串,想要去掉其两端的空白字符,操作如下:
var str = ' wh ';
console.log(str);
var str1 = str.trim();
console.log(str1);
</script>
打印结果为:
三、对象方法
1、Object.keys()
Object.keys()
用于获取对象自身所有的属性。效果类似 for…in
,返回一个由属性名组成的数组。
语法:
Object.keys(obj)
例如现在有一个对象,我们想要获取它里面的属性名,我们就可以这么操作:
var obj = {
id: 1,
name: '王欢',
sex:'女',
age: 18
}
console.log(obj);
var obj1 = Object.keys(obj);
console.log(obj1);
打印的结果为:
如果我们想使用上面得到的数组obj1
中的内容,就可以通过forEach
来遍历获取。
代码为:
obj1.forEach(function(value){
console.log(value);
})
打印的结果为:
2、Object.defineProperty()
Object.defineProperty()
定义对象中新属性或修改原有的属性。
语法:
Object.defineProperty(obj, prop, descriptor)
- obj:必需。目标对象
- prop:必需。需定义或修改的属性的名字
- descriptor:必需。目标属性所拥有的特性
这里我们需要注意的是:descriptor这个值有几个限定,首先它必须以对象的形式写入。
其次,它可以写的值有:
值 | 意义 |
---|---|
value | 设置属性的值 默认为undefined |
writeable | 值是否可以重写。true /false 默认为false |
enumberable | 目标属性是否可以被枚举。true /false 默认为 false |
configurable | 目标属性是否可以被删除或是否可以再次修改特性 true / false 默认为false |
例如:
当我们要修改上例中的对象的name
属性时,我们可以操作为:
var obj = {
id: 1,
name: '王欢',
sex:'女',
age: 18
}
console.log(obj);
Object.defineProperty(obj,'name',{
value:'小熊'
})
console.log(obj);
打印结果为:
如果我们要将sex
属性设置为不可修改时,可以操作为:
Object.defineProperty(obj,'sex',{
writable:false
})
obj.sex = '男'
console.log(obj);
当我们修改属性后,在打印这个对象,得到的结果为:
当我们将sex
设置为:writable:true
,在打印试试:
修改成功。
如果我们想要让上述中的age
在遍历的时候被隐藏掉2,我们可以做如下操作:
Object.defineProperty(obj,'age',{
enumerable:false
})
console.log(Object.keys(obj));
打印的结果为:
可以看到age
这个属性遍历时并不会显示。
需要注意的是,通过Object.defineProperty()
添加的属性,其enumerable
值也默认为false
,所以在遍历的时候也不显示,如果想要显示,直接将其手动改为true
.
如果我们不想删除某个属性,并且禁止其被删除,应该怎么操作呢,这里就要要用到configurable
这个值。
以上述为例,如果不允许id
属性被删除,应该操作为:
Object.defineProperty(obj,'id',{
configurable:false
})
delete obj.id
console.log(obj);
输出结果为:
当我们通过delete
来删除id
属性时,发现删除失败。
而且,对于configurable
这个值,我们还要谨记:它不可被二次修改。