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 相关文章推荐
js左侧多级菜单动态的解决方案
Feb 01 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
Jun 18 Javascript
使用jQuery操作Cookies的实现代码
Oct 09 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
JQuery文字列表向上滚动的代码
Nov 13 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 Javascript
jQuery实现简洁的导航菜单效果
Nov 23 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
Jul 07 Javascript
详解Vue webapp项目通过HBulider打包原生APP
Jun 29 Javascript
在vue和element-ui的table中实现分页复选功能
Dec 04 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 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
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
nodejs教程之入门
2014/11/21 NodeJs
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
对Python中plt的画图函数详解
2018/11/07 Python
Django配置文件代码说明
2019/12/04 Python
Python猴子补丁知识点总结
2020/01/05 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
园林设计师自荐信
2013/11/18 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python