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加入收藏夹功能(兼容IE、firefox、chrome)
May 05 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
Feb 25 Javascript
简介JavaScript中search()方法的使用
Jun 06 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
Apr 16 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
discuz表情的JS提取方法分析
Mar 22 Javascript
《javascript少儿编程》location术语总结
May 27 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
Jul 07 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
Nov 05 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
Nov 28 Javascript
javascript实现小型区块链功能
Apr 03 Javascript
如何根据业务封装自己的功能组件
Apr 19 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
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
JavaScript静态的动态
2006/09/18 Javascript
XML的代替者----JSON
2007/07/21 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
python中常用的数据结构介绍
2021/01/12 Python
中国网上药店领导者:1药网
2017/02/16 全球购物
博士研究生自我鉴定范文
2013/12/04 职场文书
报社实习生自荐信
2014/01/24 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
优质服务演讲稿
2014/05/14 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书