美文网首页Front End
[FE] console.log陷阱

[FE] console.log陷阱

作者: 何幻 | 来源:发表于2017-06-13 16:13 被阅读31次

在前端开发中,我们经常使用console.log在浏览器控制台上打印日志,
可是当打印一个引用类型的对象时,可能会遇到奇怪的情况,
打印的结果不是该对象被打印时候的值,而是程序执行完以后该对象的结果值。

Chrome 版本 59.0.3071.86(正式版本) (64 位)

const x = [];
console.log(x);

x.push(1);
console.log(x);

这两条log在控制台上显示如下:

→ []
→ [1]

我们点击控制台上的>,是可以展开看结果内容的。

↓ []
    0: 1
    length: 1
  → __proto__: Array(0)

↓ [1]
    0: 1
    length: 1
  → __proto__: Array(

展开后看到的内容,是x的最终结果。

→ []→ [1]在不被展开的时候是可以区分的,可是有一些情况是无法区分的

const y = { a: { b: 0 } };
console.log(y);

y.a.b = 1;
console.log(y);

控制台上显示的结果是不可区分的,

→ Object {a: Object}
→ Object {a: Object}

在控制台中展开后的结果,也是不可区分的

↓ Object {a: Object}
  ↓ a: Object
      b: 1
    → __proto__: Object
  → __proto__: Object

↓ Object {a: Object}
  ↓ a: Object
      b: 1
    → __proto__: Object
  → __proto__: Object

这时候就要注意console.log的陷阱了,
console.log是按引用方式打印对象的,一个对象的属性值并没有被拷贝出来,而是直接可以在控制台上查看它所对应的结果值。

相关文章

  • [FE] console.log陷阱

    在前端开发中,我们经常使用console.log在浏览器控制台上打印日志,可是当打印一个引用类型的对象时,可能会遇...

  • [FE] componentWillReceiveProps陷阱

    1. 生命周期 React父子组件体系中,首次渲染的生命周期函数,触发情况如下, 等渲染完后,在父组件的compo...

  • js装逼指南

    console.log设置style ``` console.log(`%c ┏┓┏┓+ + ┏┛┻━━━...

  • 判断为空,为什么会出问题?

    console.log(!Boolean('')) console.log(!Boolean(' ')) cons...

  • js..3

    声明提前 console.log(a); var a=3; var a; console.log(a); a=...

  • typeof返回哪些数据类型

    console.log(typeof 10); //number console.log(typeof '10')...

  • 倒计时

    // console.log(times.toDateString()); // console.log(time...

  • vscode去注释

    console.log()加了分号 console.log()没加分号

  • .4

    声明提前 console.log(a); var a=3; var a; console.log(a); a=3;...

  • console.log小用法

    console.log("%c content", "css"); eg :console.log("%c ow"...

网友评论

    本文标题:[FE] console.log陷阱

    本文链接:https://www.haomeiwen.com/subject/wbgdqxtx.html