Javascript-Object
好好学习,天天向下!
js中的一些内置方法还是挺好用的,使用它们有时候会节省我们很多时间,还有减少代码量
一、Object.keys(obj)
获取一个对象的key值,但是参数obj必须是可枚举的对象,他会返回一个包含对象自身的所有可枚举属性值的数组。
let obj = {
a: 1,
b: 2,
c: 3,
d: 4,
e: {
a: 1,
b: 2
},
abc: 123
};
let keys = Object.keys(obj);
console.log(keys);//["a", "b", "c", "d", "e", "abc"]
二、Object.values(obj)
获取一个对象value值,同样参数obj也必须是可枚举的对象,他会返回一个包含对象自身的所有可枚举属性值的数组。
let values = Object.values(obj);
console.log(values);//[1, 2, 3, 4, {…}, 123]
注意: 上面两个方法所返回的数组和你去for...in
的值的顺序是一样的,所以可以放心使用
三、Object.assign(target, …sources)
对对象进行深拷贝( 仅适用于第一层 ),下面给出两个例子进行对比
一般的对象赋值(浅拷贝)
let target = {};
let sources = {
A: 1,
B: 2
};
target = sources;
console.log(target, sources);//{A: 1, B: 2} {A: 1, B: 2}
sources.B = 3;
target.A = 4;
console.log(target, sources);//{A: 4, B: 3} {A: 4, B: 3}
target = {};
sources = {
A: 1,
B: 2
};
target和sources已经紧紧的绑在了一起,不管改变哪一个另一个对象都会随之改变
使用Object.assign(target, …sources)进行深拷贝
target = {};
sources = {
A: 1,
B: 2
};
Object.assign(target, sources);
console.log(target, sources);//{A: 1, B: 2} {A: 1, B: 2}
sources.B = 3;
target.A = 4;
console.log(target, sources);//{A: 4, B: 2} {A: 1, B: 3}
可见target中的元素并不会随着sources中元素的改变而改变,反之亦然
注意: 使用Object.assign(target, …sources)也仅仅只能把对象第一层的元素进行深拷贝,第二乃至第N层的还是浅拷贝,在此是可以使用递归进行判断子元素是否为对象,如果是对象则使用Object.assign(target, …sources)进行拷贝即可
来源:CSDN
作者:...everyThing
链接:https://blog.csdn.net/weixin_43160780/article/details/103553139