js console.log打印对象时属性缺失的解决方法


Posted in Javascript onMay 23, 2019

1. 序

在编写代码时,我们常常用 console.log() 的方式将信息在控制台中打印出来以帮助我们进行前端调试。一般情况下,我们打印普通值都没有问题,但在打印对象类型时,我们就需要注意点了,要不然可能会出现不符合期望的结果。

2. console.log()输出对象属性缺失

  • 首先,定义了一个 cat对象 ,其拥有 name, age, color, birthday 四个属性。
  • 接着,我们又定义了一个函数 test ,它接收一个对象作为参数。调用test函数时,我们想知道传入test函数的参数是怎样的,会先调用 console.log(obj) 将传入的对象打印出来,最后在函数内的某处删除传入对象的 name 属性。

那么,此时将 cat 对象作为参数调用 test 函数,控制台打印出来的信息将会是什么呢?会是我们预想的传入时参数的样子吗?

const cat = {
 name: '喵喵',
 age: '2',
 color: 'white',
 birthday: '1月1号'
}

function test(obj) {
 console.log(obj)
 //这里有段很长的代码...
 delete obj.name
}

test(cat)

控制台输出信息:

js console.log打印对象时属性缺失的解决方法

咋一看,没问题,输出的结果的确是我们传入时的样子。但实际中,传入的对象可能具有很多属性,那么我们想要看完整的信息就必须将输出结果展开。如下:

js console.log打印对象时属性缺失的解决方法

展开的信息中,我们可以看到结果少了 name 属性,细心的小伙伴可以发现还多了一个感叹号的标志(鼠标悬浮的文字:Value below was evaluated just now.)。咦,奇怪了,我们不是在test函数内的第一行代码就输出参数的信息的吗,怎么会少了 name 属性? 其实感叹号的内容已经说明了,我们展开的信息其实是刚刚获取到的结果,也就是代码执行后的结果,test函数中有一段 delete obj.name 的代码,执行完后,obj对象当然就没有 name

属性啦。在复杂的项目中,对象属性会很多,代码中的不知哪一处也可能会删除了对象的某些属性,这时我们打印出来的结果可能就会跟传入时的不一样,这种情况下我们可能就会一头雾水了。那么如何获取正确的结果呢?

3. 获取正确的结果

由于展开 console.log() 的结果并不是我们代码所处位置那个时间点的对象的拷贝,故我们想要在代码执行到那个位置时的那个时间点对应的对象状态,只要在那时输出 对象的副本 即可。

3.1 方法1:对象展开

const cat = {
 name: '喵喵',
 age: '2',
 color: 'white',
 birthday: '1月1号'
}

function test(obj) {
 console.log({...obj}) //使用ES6的对象展开符操作,获取到obj的副本。
 //这里有段很长的代码...
 delete obj.name
}

test(cat)

这时,我们得到的就是 console.log() 执行时间点时obj的状态啦。

js console.log打印对象时属性缺失的解决方法

3.2 方法2: JSON.stringfy()看字符串

const cat = {
 name: '喵喵',
 age: '2',
 color: 'white',
 birthday: '1月1号'
}

function test(obj) {
 console.log(JSON.stringify(obj)) //调用JSON.stringify()方法将对象转化为字符串
 //这里有段很长的代码...
 delete obj.name
}

test(cat)

同样,此时我们也可以得到代码运行时间点时的obj对象状态。

js console.log打印对象时属性缺失的解决方法

总结 : 以上两种方法都可以获取代码运行时的对象状态,但是比较 推荐第一种方法,因为当内容非常多时,第一种方法可以展开数据,有利于我们更快捷清晰地获取目标信息。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(2)
Dec 23 Javascript
javascript 触发事件列表 比较不错
Sep 03 Javascript
JQuery自定义事件的应用 JQuery最佳实践
Aug 01 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
分享javascript计算时间差的示例代码
Mar 19 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
Vue filters过滤器的使用方法
Jul 14 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
Sep 28 Javascript
JS+H5 Canvas实现时钟效果
Jul 20 Javascript
vue进入页面时滚动条始终在底部代码实例
Mar 26 Javascript
Node.js+ELK日志规范的实现
May 23 #Javascript
jquery+php后台实现省市区联动功能示例
May 23 #jQuery
js尾调用优化的实现
May 23 #Javascript
浅谈redux, koa, express 中间件实现对比解析
May 23 #Javascript
Express结合Webpack的全栈自动刷新
May 23 #Javascript
ajax跨域访问遇到的问题及解决方案
May 23 #Javascript
简单了解JavaScript异步
May 23 #Javascript
You might like
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
Javascript学习指南
2014/12/01 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
列举Python中吸引人的一些特性
2015/04/09 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
暑期实习鉴定
2013/12/16 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
小学英语教学反思
2014/01/30 职场文书
大学生活动策划方案
2014/02/10 职场文书
汉语言文学职业规划
2014/02/14 职场文书
校园环保建议书
2014/05/14 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
公民代理授权委托书
2014/09/24 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技