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 相关文章推荐
使用Jquery来实现可以输入值的下拉选单 雏型
Dec 06 Javascript
不同Jquery版本引发的问题解决
Oct 14 Javascript
jQuery+css实现的换页标签栏效果
Jan 27 Javascript
浅析JavaScript回调函数应用
May 22 Javascript
jQuery包裹节点用法完整示例
Sep 13 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
Sep 19 Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 Javascript
vue2.0开发实践总结之入门篇
Dec 06 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
javascript 面向对象实战思想分享
Sep 07 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
Mar 26 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
Nov 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
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
AngularJs Understanding the Model Component
2016/09/02 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
详解python中的Turtle函数库
2018/11/19 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
python的debug实用工具 pdb详解
2019/07/12 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
Python 下载及安装详细步骤
2019/11/04 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
shell程序中如何注释
2012/02/17 面试题
大学活动邀请函
2014/01/28 职场文书
物理系毕业生自荐书范文
2014/02/22 职场文书
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫