不同情况下控制台(JavaScript V8)中对象表示的差异

不同情况下控制台(JavaScript V8)中对象表示的差异,javascript,ecmascript-6,prototypal-inheritance,Javascript,Ecmascript 6,Prototypal Inheritance,案例一:控制台中对象的表示 var obj1 = {name: "Robert"} console.log(obj1); console.log(obj1.__proto__) 输出: 现在,请参见对象的表示: 有一套花括号 大括号内的属性值 此外,对象的名称为“Obj1”,但未提及 案例二:另一案例中的对象表示 var str = "abc"; console.log(str.__proto__); 输出: 现在,请注意: 仍然存在一个对象,其中包含一组属性值 区别在于现在“字符

案例一:控制台中对象的表示

var obj1 = {name: "Robert"}
console.log(obj1);
console.log(obj1.__proto__)
输出:

现在,请参见对象的表示:

  • 有一套花括号
  • 大括号内的属性值
  • 此外,对象的名称为“Obj1”,但未提及
案例二:另一案例中的对象表示

var str = "abc";
console.log(str.__proto__);
输出:

现在,请注意:

  • 仍然存在一个对象,其中包含一组属性值
  • 区别在于现在“字符串”文本显示在对象的前面
  • 问题是,如果在前面的例子中,我们没有看到“Obj1”或“Object”——在前面的例子中,对象的proto或对象构造函数,为什么是现在
  • 在任何情况下,它都应该是none,在case I中也应该是“Obj1”或“Object”
  • 难道这一切都错了吗
简而言之:

现在,我的问题是——hello的“字符串”是什么——关键字在做什么 在这里如果它是一个对象,那么应该只有两个花括号 曾经去过那里——还有里面的财产。这是什么新规定 “字符串”关键字是否显示在对象之前?这不是错了吗 或异常


这是一个实现上的怪癖,我认为它没有任何官方意义,它只是引擎开发人员决定在事情记录下来时向用户显示的东西。这是因为左边的名称不是对象的名称,而是对象的类。例如
x=”“,console.log(x.。\uuuu proto\uuuuuu)
应该打印
字符串,而不是
x
。简而言之,
对象
对象只由
{…
表示,
数组
对象由
[…
表示。这并不是真正的原因-这只是浏览器开发人员想做的事情,对吧,但如果构造函数得到“对象”,为什么不一样呢?或者如果我们在本地开发任何对象?——同样的情况,不是吗。这似乎是不一致或混乱的——就像字符串、数字、布尔值一样。当是对象或其衍生物(数组、函数等)的情况时,没有“对象”术语是wierd。@slebetman:Yah,所以让我们有
x={}
。现在,console.log(x.\uuuu proto\uuuu)应该打印什么?不是“x”而是“Object”至少我希望是人。就像我说的。你需要问浏览器开发人员为什么。没有特别具体的原因。类的显示主要是为了帮助调试。语言规范中没有定义它应该如何工作。事实上,
console.log()
不在语言规范中,所以Chrome可以(而且确实可以)与node.js、Edge或Firefox的实现方式不同