代码之家  ›  专栏  ›  技术社区  ›  Lee Brindley

显示十六进制数的控制台设置

  •  0
  • Lee Brindley  · 技术社区  · 8 年前

    我刚刚注意到,当将包含十六进制字符串值的数据结构记录到控制台时,它会将字段输出为1,而不是字符串值。这在Chrome和Safari中都有发生。

    enter image description here

    在屏幕截图的顶部,您可以看到一个正在记录的对象,这个对象有一个“\u id”字段,这个字符串是MongoDb ObjectId,简而言之,它是一个十六进制字符串。

    您可以在屏幕截图的顶部看到,id字段包含一个字符串,但当打印(对象)值(展开视图)时,它将显示为(数字)1。

    第二个日志是me控制台。显式记录值,即。

    //Where obj is the object being logged in the screenshot.
    console.log(obj.data._id);
    

    不确定这里到底发生了什么,我看不出被记录的值是如何输出为数字1的,这不是十六进制字符串的基10值,控制台肯定在对该值进行一些假设,并对其进行处理,但不确定那里到底发生了什么。

    所以我的问题是

    为什么这里要打印1?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Keith    8 年前

    在不知道对象发送到控制台后发生了什么情况的情况下,我假设您在这里看到的是Chrome的控制台日志如何保存对对象的引用,它在控制台日志记录时不保存快照,而是对对象的实时引用。

    下面是一个简单的例子。

    打开Chromes控制台,。你会看到的 {x: "one"} ,但当您展开对象时,您将看到 x: 1 而不是 x: "one" ..

    var a = {
      x: "one"
    };
    
    console.log(a);
    
    a.x = 1;