29427


**Chromeのコンソール画面でオブジェクトを表示させた時、先頭に表示されるのはコンストラクタ名？**  
・Hoge {}  
・hoge {site: "スタック"}

* * *
[code]

    function Hoge() {
      console.log(this); //Hoge {}
    }
    var obj = new Hoge();
    
[/code]

* * *
[code]

    var service = {
     p: '1',
     hoge: function(site) {
       this.site   = "スタック";
     }
    }
    var target = new service.hoge();
    console.log(target); //hoge {site: "スタック"}
    
[/code]

* * *

**オブジェクトをconsole.log表示させた時の内容は、何に基づく書式なのでしょうか？**

[code]

    var obj = Hoge {};
    console.log(obj); //Uncaught SyntaxError: Unexpected token {
    var obj = new Hoge {};
    console.log(obj); //Uncaught SyntaxError: Unexpected token {
    
    var target = hoge {site: "スタック"};
    console.log(obj); /Uncaught SyntaxError: Unexpected token {
    var target = new hoge {site: "スタック"};
    console.log(obj); /Uncaught SyntaxError: Unexpected token {
    
[/code]

* * *

**下記が同一であることは何に基づくのでしょうか？**  
・自明の理？

[code]

    hoge {site: "スタック"}
    
[/code]

* * *
[code]

    function hoge() {
       this.site   = "スタック";
    }
    
[/code]


CC BY-SA 3.0
2016-10-08T00:08:06.877
29423
2016-10-08T06:45:52.083
7886
question
javascript
コンソール画面でオブジェクトをconsole.log表示させた時の内容は、何に基づく書式なのでしょうか？


Console API
に関してはインターフェイスこそ[標準化が始まっているようです](https://github.com/whatwg/console)が、その出力は各ブラウザが好きなように実装しているのが現状かと思います。

例えば次のサンプルコードを各ブラウザで実行してみると、このような結果になりました。

[code]

    var service = {
      p: '1',
      hoge: function (site) {
        this.domain = "ja.stackoverflow.com";
        Object.defineProperty(this, "site", {
          value: "スタック",
          writable: false
        });
        Object.defineProperty(this, "site_en", {
          get: function(){ return "Stack"; }
        });
      },
    }
    var target = new service.hoge();
    console.log(target);
[/code]

  * IE11: `[object Object] {domain: "ja.stackove...", site: "スタック", site_en: "Stack"}`
  * Firefox50: `Object { domain: "ja.stackoverflow.com", 他 2 個... }`
  * Chrome55: `hoge {domain: "ja.stackoverflow.com", site: "スタック"}`

プロパティの表示の仕方はおおむね同じですが、表示するプロパティの条件や、コンストラクタ名の表示についてはまちまちです。もちろん、いずれも有効な
JavaScript コードではありません。

ですから、 JavaScript として有効な構文を狙っているというより、単に読みやすいように出力しているだけ、と考えるとよいのではないでしょうか。


CC BY-SA 3.0
2016-10-08T06:45:52.083
29427
2016-10-08T06:45:52.083
8000
29423
answer