36229


JavaScriptでObjectをnewして変数に入れて実行した時とnewしていないときで実行結果が同じになります。  
実際どのような違いがあるのでしょうか。コード1,2,3の違いがよく分かりません。

[code]

    ■コード1
    var myCar = new Object();
    myCar.model = "Mustang";
    
    alert(myCar.model);
    
    ■コード2
    var myCar;
    myCar.model = "Mustang";
    
    alert(myCar.model);
    
    ■コード3
    var myCar = {};
    myCar.model = "Mustang";
    
    alert(myCar.model);
    
[/code]


CC BY-SA 3.0
2017-07-09T11:48:21.270
36220
2017-07-10T04:19:49.473
2017-07-10T04:19:49.473
3054
17348
question
javascript
宣言だけした変数、new Object() を代入した変数、{} を代入した変数、それぞれの違い


コード１とコード３は（私の知る限りでは）機能としての違いはありません。  
コード１は、Object コンストラクタによるオブジェクトの作成で、  
コード３は、オブジェクトリテラル(`{ }`)によるオブジェクトの作成で、  
それぞれ作成されたオブジェクトの機能上の違いはないです。

[code]

    //code 1:
    var myCar1 = new Object();
    myCar1.model = "Mustang";
    
    console.log("myCar1 model:" + myCar1.model);
    
    //code 3:
    var myCar3 = {};
    myCar3.model = "Mustang";
    
    console.log("myCar3 model:" + myCar3.model);
[/code]

コード２は、mjyさんも指摘しているようにエラーになるはずです。  
明示的に初期化されていないために`myCar2`は`undefined`になっていて  
`undefined`はいわゆるオブジェクト型ではなくプロパティを設定できないためにエラーになります。  
質問者さんが検証した時に、エラーにならなかった理由としては、  
おそらく名前の重複とか何回か試してみたなどのためにすでに定義済みになっているためだと思います。

[code]

    //code 2:
    var myCar2;
    console.log(myCar2);//undefined
    myCar2.model = "Mustang";//"Cannot set property 'model' of undefined"のエラーになる(ブラウザによってエラーメッセージは異なる)
    
    console.log("myCar2 model:" + myCar2.model);
[/code]

※サンプルコードの変数名を重複しないように変更しています。また、alertをconsole.logに変更しました。（ポップアップ禁止をさけるためと結果が残るため）


CC BY-SA 3.0
2017-07-09T20:59:33.310
36229
2017-07-10T03:56:58.457
2017-07-10T03:56:58.457
5044
5044
36220
answer