手机版

打印对象时缺少属性的解决方案

时间:2021-08-23 来源:互联网 编辑:宝哥软件园 浏览:

1.前言

在编写代码时,我们经常会将控制台中的信息以console.log()的形式打印出来,帮助我们调试前端。在正常情况下,我们打印普通值没有问题,但是在打印对象类型时,我们需要注意,否则可能会出现意想不到的结果。

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

首先定义一个猫对象,它有四个属性:名字、年龄、颜色、生日。然后,我们定义一个函数测试,它接收一个对象作为参数。当调用测试函数时,我们想知道哪些参数被传递到测试函数中。我们将首先调用console.log(obj)来打印传入的对象,最后在函数的某个地方删除传入对象的name属性。然后,此时调用以cat对象为参数的测试函数,控制台会打印出什么信息?传入参数时会是我们所期望的吗?

Const cat={name:' meow ',age :' 2 ',color :' white ',生日: ' 1月1日' }函数测试(obj){ console . log(obj)//这里有一个很长的代码.delete obj.name }测试(cat

乍一看,没问题,输出和我们介绍它的时候一模一样。但是实际上,传入的对象可能有很多属性,所以如果我们想看到完整的信息,就必须扩展输出结果。如下所示:

在展开的信息中,我们可以看到结果中缺少名称属性,细心的朋友可以发现有一个感叹号(鼠标悬浮文本:下面的值刚才被求值了。).哎呀,真奇怪。我们不是刚刚在测试函数的第一行代码中输出了参数信息吗?名称属性怎么会丢失?其实感叹号的内容已经解释过了。我们展开的信息其实就是刚刚得到的结果,也就是代码执行后的结果。测试函数中有一个delete obj.name的代码。执行之后,obj对象当然没有名字。

属性。在复杂的项目中,对象的属性会有很多,对象的一些属性可能会在代码的某些地方被删除。这时候我们打印出来的结果可能和导入的时候不一样,这种情况下我们可能会比较混乱。那么如何得到正确的结果呢?

3.获得正确的结果

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

3.1方法1:对象扩展

Const cat={name:' meow ',age :' 2 ',color :' white ',生日: ' 1月1日' }功能测试(obj){ console . log({ 0.obj })//使用ES6对象扩展器操作获取obj//这里有一个长代码.delete obj.name}test(cat)此时,我们得到的是console.log()执行时obj的状态。

3.2方法2: JSON。stringfy()看这个字符串

Const cat={name:' meow ',age: '2 ',color: 'white ',Birthday: '1月1日' } Function test(obj){ console . log(JSON.stringfy(obj))//调用JSON . stringfy()方法将对象转换为字符串//这里有一个很长的代码.删除obj.name }测试(cat)。同时,我们还可以得到

总结:以上两种方法都可以在代码运行时获取对象状态,但是推荐使用第一种方法,因为当内容很多时,第一种方法可以扩展数据,有助于我们更快更清晰地获取目标信息。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:打印对象时缺少属性的解决方案是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。