【问题标题】:Console's distinction implied by lower vs upper case in "[object Object]"“[object Object]”中的小写与大写所暗示的控制台区别
【发布时间】:2016-11-19 21:37:14
【问题描述】:

我发现没有提到这种微妙但看似重要的区别。我的问题是关于控制台对 Object vs object 的大小写。

例如:

function Person(name) {
this.name = name;
}
var bob = new Person("Bob");

console.log(bob.name); // Bob --as desired.

然而,

console.log(bob); // [object Object]

我的问题不是关于我的代码逻辑,而是关于控制台的消息。

“object”和“object”这两个词的大小写有什么区别?

对此的回答可能使我和其他人能够牢牢掌握控制台试图指示的内容。

【问题讨论】:

  • 执行格式化的不是控制台(实际上,在 Chrome 中,我希望 console.log(bob) 显示类似 Person {name: "Bob"} 的内容)。 "[object Object]"(someObject).toString() 的结果...尽管您关于大写的问题仍然适用。我相信这表明您有一个 Object 类型的“对象”,而不是看到 that 类型的对象的字符串 "[object HTMLDivElement]"...
  • @nnnnnn 谢谢!

标签: javascript object console google-chrome-devtools javascript-objects


【解决方案1】:

在您的情况下,您的 bob 对象正在通过 toString 方法转换为字符串,该方法由 ES6 规范定义如下:

ES6: Object.prototype.toString ( ):

toString方法被调用时,执行如下步骤:

  1. 如果 this 值为 undefined,则返回 "[object Undefined]"
  2. 如果 this 值为 null,则返回 "[object Null]"
  3. O 为 ToObject(this 值)。
  4. isArray 为 IsArray(O)。
  5. ReturnIfAbrupt(isArray).
  6. 如果 isArraytrue,则让 builtinTag"Array"
  7. 否则,如果 O 是一个奇异的 String 对象,则让 builtinTag"String"
  8. 否则,如果 O 有一个 [[ParameterMap]] 内部槽,则让 builtinTag"Arguments"
  9. 否则,如果 O 有 [[Call]] 内部方法,则让 builtinTag"Function"
  10. 否则,如果 O 有一个 [[ErrorData]] 内部插槽,则让 builtinTag"Error"
  11. 否则,如果 O 有一个 [[BooleanData]] 内部插槽,则让 builtinTag"Boolean"
  12. 否则,如果 O 有 [[NumberData]] 内部插槽,则让 builtinTag"Number"
  13. 否则,如果 O 有一个 [[DateValue]] 内部槽,则让 builtinTag"Date"
  14. 否则,如果 O 有一个 [[RegExpMatcher]] 内部插槽,则让 builtinTag"RegExp"
  15. 否则,让 builtinTag"Object"
  16. tag 为 Get (O, @@toStringTag)。
  17. ReturnIfAbrupt(标签)。
  18. 如果 Type(tag) 不是 String,则让 tagbuiltinTag
  19. 返回作为连接"[object "tag"]" 的结果的字符串。

基本上,规范说创建一个如下所示的字符串:"[object " + InternalClassName + "]" 其中InternalClassName 是对象的本机构造函数,在您的情况下为Object。第一个是小写,因为规范说使用该字符串,第二个是大写,因为这是本机构造函数的名称。

【讨论】:

  • 我需要考虑一下才能真正吸收它。非常有趣谢谢!
猜你喜欢
  • 2019-11-24
  • 2017-08-19
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多