一个深拷贝方法的漏洞与一个javascript经典bug
今天做某个项目,需要函数深拷贝。
在网上随便找了个代码粘上去,结果报错了。
/** * * @desc 递归法 对象深拷贝 * @param {Object} * @return {new Object} */ static objectCopy (obj) { var newobj = obj.constructor === Array ? [] : {}; if(typeof obj !== 'object'){ return; } for(var i in obj){ newobj[i] = typeof obj[i] === 'object' ? this.objectCopy(obj[i]) : obj[i]; } return newobj }
开始的时候一脸懵逼,后来想起来了:typeof null 有个bug,而在我的项目中需要用这个方法的对象有的值是null。
typeof null // "object"
即:
typeof null === “object” // true
所以这个方法得稍微改一下。
/** * * @desc 递归法 对象深拷贝 * @param {Object} * @return {new Object} */ static objectCopy (obj) { var newobj = obj.constructor === Array ? [] : {}; if(typeof obj !== 'object'){ return; } for(var i in obj){ newobj[i] = (typeof obj[i] === 'object' && !(obj[i] === null)) ? this.objectCopy(obj[i]) : obj[i]; } return newobj }
红色的部分就是修改后的部分。
以上。
posted on 2019-02-20 18:49 fox_charon 阅读(266) 评论(0) 编辑 收藏 举报