在js中如何复制一个对象,例如如下一个js对象。
如果知道这个对象的所有属性自然就可以重新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 属性不考虑原型链中的对象。
- 前言
- js封装和作用域
- 封装html的select标签的js操作
- js正则表达式的使用
- 使用闭包对setTimeout进行简单封装
- js中如何复制一个对象,如何获取所有属性和属性对应的值
- js中如何把字符串转化为对象
- js操作iframe兼容各种浏览器
- js模板方法的思路及实现
- 在js中如何实现方法重载?以及函数的参数问题
- 单纯的html页面如何提交,传递参数,以及对身份的验证
- ajax如何调试
- js综合应用简单的表格统计
- js格式化货币数据
- js综合应用:表格的四则运算
- 如何在浏览器中打开PDF文件并实现预览的思路与代码
- js实现幻灯片效果
- js实现幻灯片效果二
- jquery-easyui必填项隐藏问题的处理方案
- jquery-easyui隐藏可用不可用的问题的处理方案
- js变量作用域--变量提升