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);
【JavaScript中如何有效地深拷贝一个对象()】但是使用:
JSON.parse(JSON.stringify(obj))
是拷贝或克隆对象最快的方法,比jQuery的克隆方法还快,jQuery的extend函数中,如果设置为false(浅拷贝)该函数则非常快,但是它包含了一些用于类型验证的逻辑,并且不会复制未定义的属性,这会使速度慢一些。自定义拷贝对象可以使用for循环,在遍历的时候使用hasOwnProperty函数检查进行克隆,注意JSON.parse()方法不会反悔Date对象。
推荐阅读
- 在JavaScript中如何格式化日期(有几种方式?哪种提供完全自定义格式化?)
- 在JavaScript中使用哪个等号(== vs ===)进行比较操作好()
- var functionName=function(){}和functionName=function(){}有什么区别()
- JavaScript正则表达式高级语法原理分析和应用实例
- 不理解JS的模块化,JavaScript的模块化是如何演变或发展来的(如何实现?)
- JavaScript有异常和错误处理吗(如何进行异常处理?可以自定义吗?)
- JavaScript中函数调用分别都有哪些方式(对应的使用场景是什么?)
- AngularJS | angular.isString()函数用法介绍
- Python中的numpy.square()用法详细介绍