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 数组运用实现代码
Apr 13 Javascript
jquery常用技巧及常用方法列表集合
Apr 06 Javascript
Web开发之JavaScript
Mar 29 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
Dec 11 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
JS实现日期时间动态显示的方法
Dec 07 Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
JavaScript Window窗口对象属性和使用方法
Jan 19 Javascript
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
vue element-ui中table合计指定列求和实例
Nov 02 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中文字符截取防乱码
2008/03/28 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
简述php环境搭建与配置
2016/12/05 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
JS画线(实例代码)
2013/11/20 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
Python实现简单的2048小游戏
2021/03/01 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
营销总经理的岗位职责
2013/12/15 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
民政局个人整改措施
2014/09/24 职场文书