您的位置:首页 > Web前端 > JavaScript

JavaScript对象常用方法总结以及对象拷贝

2019-06-03 21:13 357 查看

对象常用方法
对象拷贝

对象常用方法

什么是对象?

对象

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)

4000
方法 描述
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,深层拷贝,最终拷贝到对象的数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: