您的位置:首页 > Web前端 > JavaScript

由于js对象浅拷贝导致的遍历出错

2016-10-19 17:52 155 查看
js中一切皆对象,原始数据对象包括字符串、布尔型、数值,合成数据对象包括数组、对象、函数。普通对象存储的是对象的实际数据,而引用对象存储的是对象的引用地址,而把对象的实际内容单独存放。在拷贝时,普通对象拷贝的是对象值,引用对象拷贝的是对象的引用地址即所谓的浅拷贝。

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
相关文章推荐