由于js对象浅拷贝导致的遍历出错
2016-10-19 17:52
155 查看
js中一切皆对象,原始数据对象包括字符串、布尔型、数值,合成数据对象包括数组、对象、函数。普通对象存储的是对象的实际数据,而引用对象存储的是对象的引用地址,而把对象的实际内容单独存放。在拷贝时,普通对象拷贝的是对象值,引用对象拷贝的是对象的引用地址即所谓的浅拷贝。
在对attrs 进行遍历时,同时对attrs 的拷贝数据来源copy[0].attributes进行了修改,使得attrs.length动态减少,所以这样遍历存在问题。一、这个可以通过在对copy[0].attributes进行了修改后,使得i值减一,即i–来处理这种情况。
二、比较麻烦的处理,给当前对象进行深度拷贝,已深度拷贝得到的对象的length属性作为i的限制条件。
http://jerryzou.com/posts/dive-into-deep-clone-in-javascript/
作者提供了几种深拷贝的解决思路,总结的很好。。。赞赞赞
var attrs = $copy[0].attributes; for (var i=0;i<attrs.length;i++) { var attrName = attrs[i].name; if(attrName !== "src" && attrName !== "alt") { $copy[0].attributes.removeNamedItem(attrName); } }
在对attrs 进行遍历时,同时对attrs 的拷贝数据来源copy[0].attributes进行了修改,使得attrs.length动态减少,所以这样遍历存在问题。一、这个可以通过在对copy[0].attributes进行了修改后,使得i值减一,即i–来处理这种情况。
二、比较麻烦的处理,给当前对象进行深度拷贝,已深度拷贝得到的对象的length属性作为i的限制条件。
http://jerryzou.com/posts/dive-into-deep-clone-in-javascript/
作者提供了几种深拷贝的解决思路,总结的很好。。。赞赞赞
相关文章推荐
- JS文件编码导致IE报错“找不到对象”
- ASP.NET 2.0 创建母版页导致js出现“ 'document.getElementById(...)' 为空或不是对象”错误
- 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例
- 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭
- WCF 套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的
- 使用__doPostBack,js出错:缺少对象
- Js遍历Josn对象(内容对比页实现思路)
- 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例
- ASP.NET 2.0 创建母版页导致js出现“ 'document.getElementById(...)' 为空或不是对象”错误
- 【WCF】 套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:00:56.9810000”。
- 由于FormPanel里面没有添加对象导致页面无法显示,浏览器报脚本错误的问题
- 由于启动用户实例的进程时出错,导致无法生成 SQL
- ASP.NET 2.0 创建母版页导致js出现“ 'document.getElementById(...)' 为空或不是对象”错误《转》
- 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例
- GetDC()导致gdi对象不断增长致软件出错
- js可以利用dom非常轻松的就可以遍历一个表格。当然只要是dom中有的所有对象都可以通过js来访问和处理。
- 页面内调用js函数出错:“缺少对象”的解决方法
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- js遍历一个对象的所有属性
- ***套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的