生活
本地特色
美食养生
求职招聘
特色小吃
家常菜
保健食品
农产品
饮料
蛋糕甜点
火锅
肉类海鲜
新闻
时光记忆
恋恋爱
母婴
测试
科技
电脑
手机
其他
编程
汽车
文化
读书
历史
心得
艺术
高考
跨境电商
跨境交流
跨境市场
跨境百科
跨境头条
玩
NBA
自驾游
徒步骑行
明星八卦
旅了个游
搞笑
游记攻略
美景分享
随手拍
城市风光
英语
英语家园
英语学习
每日一句
有声读物
汽车
搜索
快捷导航
登录
注册
ဆ
热搜词
活动
交友
discuz
本版
文章
帖子
用户
科技
+关注
+发表新主题
console.log 真的可信吗?
[复制链接]
作者:
〃陌殇、怀素
|
时间: 2023-5-13 17:33:57
|
其他
|
0
81
〃陌殇、怀素
当前离线
积分
5751
窥视卡
雷达卡
〃陌殇、怀素
1917
主题
1917
帖子
5751
积分
研究生
研究生, 积分 5751, 距离下一级还需 1249 积分
研究生, 积分 5751, 距离下一级还需 1249 积分
积分
5751
发消息
发表于 2023-5-13 17:33:57
|
显示全部楼层
|
阅读模式
相信大家都会平时在调试代码时,都会用上
console.log
、
debugger
或者
调试工具
。但是一般顺手的情况下,我们大多数都会使用
console.log
,但是
console.log
真的可信吗?
结论:
console.log
在打印引用类型的数据,可能会不准确。在复杂的断点调试时,尽可能使用
debugger
或者
调试工具
。
console.log 打印异常
var a = { index: 1, } console.log(a) a.index++ console.log(a) 复制代码
以上代码分别运行在不同的三种情况下,你会发现比较有意思的地方:
node.js 平台
web 端控制台未打开的情况(注:这里指运行代码后再打开控制台)
web 端控制台打开的情况(注:这里指打开控制台进行刷新)
注:以上 web 端经过现代浏览器测试发现:chrome、edge、firefox 表现形式一致,与上述类似。safari 在第三种情况下无法进行展开对象。
异常分析
web 端为何表现和 node.js 不同
我们都知道
引用类型
,每次使用对象时,都只是使用了对象在堆中的引用。在 node.js 平台的情况是我们预期的情况,而在 web 端为何会出现如此情况呢?
在 《你不知道的javascript中卷》 中提及过:console.* 方法族并不是JavaScript 正式的一部分,而是由宿主环境添加到JavaScript 中的。因此,不同的浏览器和JavaScript 环境可以按照自己的意愿来实现。
而在大多数浏览器中,
console.log
并不会把传入的内容立即输出,而是交给浏览器进行异步进行处理,提高性能。
在这里本人简单理解为:node.js 平台为同步打印,浏览器平台为异步打印。
web 端控制台是否打开为何不同
未打开控制台
console.log
在大多数浏览器中是在控制台打开后才起作用,也就是说,当你打开控制台时,才会进行打印。
在上述代码中,传进
console.log
中的参是一个地址,当代码执行完毕后,打开控制台,开始打印,那么它打印出的实际上是已经做完全部处理后的对象。这就相当于这样的执行顺序:
var a = { index: 1, } a.index++ console.log(a) console.log(a) 复制代码
打开控制台
打开控制台再运行代码(即打开控制台后进行刷新),那么
console.log
是直接起作用的。浏览器有个快照技术,所以我们可以看见我们在控制台看见的即为正确结果。但是我们地址对应的那个对象还是最终的样子,所以展开后不同。
解决方案
深拷贝(不推荐)
console.log(JSON.parse(JSON.stringify(a))); 复制代码
对当前的对象进行一次深拷贝,然后再次输出。
深拷贝之后,就不再指向同一处的堆。
debugger 或者 调试工具
利用 debugger 或者 调试工具 能让我们避免错误,我们应该在平时工作中经常使用。
来源:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表新帖
回复
楼主新帖
广州硅基ai数字人克隆人直播应用前景
企业微信群聊的功能是什么?内部群和外部群有什么不同?
18.6%!极电光能大尺寸钙钛矿组件效率再次问鼎全球
自媒体推广新境界:短视频多平台联动引流
2步轻松生成数字人视频,ChatGPT为你提供新体验
24小时热门
更多>
快速回复
返回列表
返回顶部