用深拷贝解决console.log的中对象的调试问题
来源:互联网 发布:销售软件哪个好用 编辑:程序博客网 时间:2024/06/11 20:17
用深拷贝解决console.log的中对象的调试问题
var obj={aa:1}
console.log(obj);
obj.aa=2
console.log(obj);
运行上面一段代码。为了跨越console.log的异步特性,将上述代码一句一句在控制台里执行,这样尅忽略异步或者多线程的问题。
然后观察结果,发现输出了两个object。鼠标点开的时候会看到对象的内容,但是发现两个object的内容是一样的。
也就是说,这种情况下,不管是何时输出的obj,点开后看到的都是最后obj的值,而不是输出的时候对象的值。
可能是因为consolelog只是输出一个对象的引用,鼠标点开的时候,会去内存里取这个引用,取到的当然总是最后的值。
这个时候,如果需要实时调试,那就需要对象深拷贝了。原理很简单:
var object_copy=function(obj){ var cache={} for(var i in obj){ if(typeof(obj[i])=="object"){ cache[i]=object_copy(obj[i]) }else{ cache[i]=obj[i] } } return cache; }
这里有递归操作,如果页面里有大量这样的调试的话,可能会内存溢出或者堆栈溢出,小心小心。
来源:http://www.html-js.com/?p=1333
console.log异步特性的事例:
var ret = [1, 2, 3, 4, 5, 3, 2, 5, 7, 8],
length = ret.length,
middle = length/2,
n, r;
console.log(ret); // [1, 2, 3, 4, 5, 7, 8, undefined × 3]
for ( n = middle; n < ret.length; n++ ) {
for ( r = 0; r < middle; r++ ) {
if ( ret[r] === ret[n] ) {
ret.splice(n--, 1);
break;
}
}
}
console.log(ret); // [1, 2, 3, 4, 5, 7, 8]
- 用深拷贝解决console.log的中对象的调试问题
- 问题:console.log()的用法
- javascript 在firebug调试时用console.log的方法
- javascript 在firebug调试时用console.log的方法
- 非常好用的前端调试函数console.log()
- javascript 和 jq 的调试 用console.log() 函数
- javascript调试不用alert用console.log的原因
- javascript 和 jq 的调试 用console.log() 函数
- console.log火狐下的调试
- 几个常用的console.log调试命令
- 调试利器console.log的用法
- IE9中调用console.log.apply的报错问题
- 解决console.log带来的伤痛
- 调试js中console.log
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- WinSocket模型的探讨——select模型
- Android NDK概述
- RMAN 系列(四) ---- RMAN 备份
- 从网页通过response导出报表到Excel2007可行性分析
- Handlers
- 用深拷贝解决console.log的中对象的调试问题
- 【排序算法】直接插入排序与希尔(Shell)排序
- smarty的基本使用
- Android NDK带来什么
- git cherry-pick 小结
- 调用WebService时加入身份验证,以拒绝未授权的访问
- extjs之隔行变色和grid加载时的等待
- 集成问题
- C语言常用库函数(含详细用法)