个性化阅读
专注于IT技术分析

JavaScript中如何有效地深拷贝一个对象?

JavaScript中如何有效地深拷贝一个对象?newObj = eval(uneval(o))在Firefox在可以实现拷贝一个对象,但是只有Firefox支持,newObj=JSON.parse(JSON.stringify(0))好像效率也不高,递归赋值函数也可以拷贝对象,但是有没有更规范的方式深拷贝一个对象?

jQuery中的clone()方法可以拷贝一个DOM元素,jQuery中的深拷贝比浅拷贝要好,可以避免很多缺陷和问题,使用方式如下:

// 浅拷贝
var newObject = jQuery.extend({}, oldObject);

// 深拷贝
var newObject = jQuery.extend(true, {}, oldObject);

但是使用:

JSON.parse(JSON.stringify(obj))

是拷贝或克隆对象最快的方法,比jQuery的克隆方法还快,jQuery的extend函数中,如果设置为false(浅拷贝)该函数则非常快,但是它包含了一些用于类型验证的逻辑,并且不会复制未定义的属性,这会使速度慢一些。自定义拷贝对象可以使用for循环,在遍历的时候使用hasOwnProperty函数检查进行克隆,注意JSON.parse()方法不会反悔Date对象。

赞(0)
未经允许不得转载:srcmini » JavaScript中如何有效地深拷贝一个对象?

评论 抢沙发

评论前必须登录!