JavaScript对象常用方法总结以及对象拷贝
对象常用方法
什么是对象?
对象
JavaScript 中的所有事物都是对象:字符串、数字、数组、日期、正则,等等。
在 JavaScript 中,对象是拥有属性和方法的数据。
字符串(String)
| 方法 | 描述 |
|---|---|
| charAt() | 返回在指定位置的字符。 |
| charCodeAt() | 返回在指定的位置的字符的 Unicode 编码。 |
| concat() | 连接字符串。 |
| indexOf() | 检索字符串。 |
| match() | 找到一个或多个正则表达式的匹配。 |
| replace() | 替换与正则表达式匹配的子串。 |
| search() | 检索与正则表达式相匹配的值。 |
| slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分。 |
| split() | 把字符串分割为字符串数组。 |
| toLocaleLowerCase() | 把字符串转换为小写。 |
| toLocaleUpperCase() | 把字符串转换为大写。 |
| toLowerCase() | 把字符串转换为小写。 |
| toUpperCase() | 把字符串转换为大写。 |
| substr() | 从起始索引号提取字符串中指定数目的字符。 |
| substring() | 提取字符串中两个指定的索引号之间的字符。 |
数组
| 方法 | 描述 |
|---|---|
| slice[start,end) | 返回从原数组中指定开始下标到结束下标之间的项组成的新数组(不影响原数组) |
| - | 1个参数:n.即:n到末尾的所有 |
| - | 2个参数:[start,end] |
| splice() | 删除:2个参数,起始位置,删除的项数 |
| - | 插入:3个参数,起始位置,删除的项数,插入的项 |
| - | 替换:任意参数,起始位置,删除的项数,插入任意数量的项 |
| pop() | 删除数组的最后一个元素,减少数组的长度,返回删除的值。(无参) |
| push() | 将参数加载到数组的最后,返回新数组的长度。 (参数不限) |
| shift() | 删除数组的第一个元素,数组长度减1,返回删除的值。 (无参) |
| unshift() | 向数组的开头添加一个或更多元素,并返回新的长度。(参数不限) |
| sort() | 按指定的参数对数组进行排序 ,返回的值是经过排序之后的数组(无参/函数) |
| concat() | 把两个数组拼接起来。 返回的值是一个副本 (参数不限) |
| join() | 将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符 |
| reduce()和reduceRight() | 缩小数组的方法,这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。 |
| indexOf() | 从数组开头向后查找,接受两个参数,要查找的项(可选)和查找起点位置的索引 |
| lastIndexOf() | 从数组末尾开始向前查找,接受两个参数,要查找的项(可选)和查找起点位置的索引 |
| filter() | 对数组中的每一项运行给定函数,返回该函数会返回true的项组成数组。 |
| forEach() | 对数组的每一项运行给定函数,这个方法没有返回值。 |
| map() | 对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组。 |
| some() | 对数组的每一项运行给定参数,如果该函数对任一项返回true,则返回true。以上方法都不会修改数组中的包含的值。 |
| every() | 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。 |
日期(Date)
| 方法 | 描述 |
|---|---|
| ceil(x) | 尽可能取最大 。 |
| floor(x) | 尽可能取最小。 |
| round(x) | 把数四舍五入为最接近的整数。 |
| max(x,y) | 返回 x 和 y 中的最高值。 |
| min(x,y) | 返回 x 和 y 中的最低值。 |
| pow(x,y) | 返回 x 的 y 次幂。 |
| sqrt(x) | sqrt(x) 返回数的平方根。 |
| random() | 返回 0 ~ 1 之间的随机数。 |
正则(Regular)
| 方法 | 描述 |
|---|---|
| compile | 编译正则表达式。 |
| exec | 检索字符串中指定的值。返回找到的值,并确定其位置。 |
| test | 检索字符串中指定的值。返回 true 或 false。 |
| search | 检索与正则表达式相匹配的值。 |
| match | 找到一个或多个正则表达式的匹配。 |
| replace | 替换与正则表达式匹配的子串。 |
| split | 把字符串分割为字符串数组。 |
对象拷贝
想要拷贝对象,先说一下数据类型。数据类型分为基本类型和引用类型。对于基本数据类型的拷贝,并没有深浅拷贝的区别,我们所说的
深浅拷贝都是对于引用数据类型而言的。而引用只发生在对象的身上。
浅拷贝
浅拷贝的意思就是只复制引用,而未复制真正的值。
function simpleClone(initalObj) {
var obj = {};
for ( var i in initalObj) {
obj[i] = initalObj[i];
}
return obj;
}
深拷贝
深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,就连值也都复制了。
目前实现深拷贝的方法不多,主要是两种:
- 利用 JSON 对象中的 parse 和 stringify
- 利用递归来实现每一层都重新创建对象并赋值
这里只说下用递归来实现拷贝。
如果对象的属性值还是一个对象,那么上面的拷贝实现的也只是拷贝了一一层引用,所以使用递归的方式对对象里的内容追根究底,直到拷贝到对象里的数据。
//浅拷贝
var obj = {a:{b:10}};
function copy(obj){
var newobj = {};
for ( var attr in obj) {
newobj[attr] = obj[attr];
}
return newobj;
}
var obj2 = copy(obj);
obj2.a.b = 20;
alert(obj.a.b); //20 ,因为拷贝的是一层引用,数据可以被改变
//改成递归后
var obj = {a:{b:10}};
function deepCopy(obj){
if(typeof obj != 'object'){
return obj;
}
var newobj = {};
for ( var attr in obj) {
newobj[attr] = deepCopy(obj[attr]);
}
return newobj;
}
var obj2 = deepCopy(obj);
obj2.a.b = 20;
alert(obj.a.b); //10,深层拷贝,最终拷贝到对象的数据

浙公网安备 33010602011771号