JavaScript中如何复制对象并获取所有属性及值

作者:青柠时间:2026-10-27 15:56:09浏览:167

本文介绍在JavaScript中如何复制一个对象并获取其所有属性及对应值。当对象属性未知时,可通过for in循环遍历可枚举属性进行复制。文章详细解析了for in的限制,即仅遍历可枚举属性,并介绍了使用propertyIsEnumerable方法判断属性是否可枚举的技巧,确保复制操作覆盖用户自定义属性。

JavaScript对象复制与属性遍历方法

在JavaScript中,如何复制一个对象?例如,给定如下一个JavaScript对象。



如果已知该对象的所有属性,自然可以重新new一个对象,然后对每个属性赋值,从而实现复制。但如果不知道属性呢?如何创建一个内容完全相同的对象呢?


代码如下:

 
var obj={ colkey: "col", colsinfo: "NameList" }

最简单的方法是使用for in循环。



例如,obj2就拥有了和obj完全相同的属性。


代码如下:

 
var obj2=new Object();
for(var p in obj)
{ 
var name=p;//属性名称
var value=obj[p];//属性对应的值
obj2[name]=obj[p];
} 

其实这种方式有一定的限制,关键是js中for in有一定限制,并不会遍历对象的所有属性,只会遍历可枚举的属性,由js核心定义的方法都是不可枚举的,例如tostring(),但代码中定义的属性都是可枚举的(可以通过特殊定义为不可枚举的)。因此这个方法就够用了。



一个对象是否可以进行for in穷举,我们可以通过propertyIsEnumerable属性来判断,说明如下:


propertyIsEnumerable 属性


返回 Boolean 值,指出所指定的属性是否为一个对象的一部分以及该属性是否是可列举的。


object.propertyIsEnumerable(proName)


参数


object


必选项。一个对象。


proName


必选项。一个属性名称的字符串值。


说明


如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。


propertyIsEnumerable 属性不考虑原型链中的对象。

作者最新文章