37746


javascriptのオブジェクトと配列について

下記のように作成するという事はわかったのですが、  
純粋なオブジェクトと配列は、中カッコと大カッコの部分のみなのでしょうか？  
つまり変数にオブジェクトと配列を代入していると考えてよいのでしょうか？

それともvar含むすべてがオブジェクトと配列そのものなのでしょうか？  
変数名の部分が配列の名前とも聞きますが、初心者なので頭がこんがらがってしまいます

[code]

    // 空の Object オブジェクトを作成する
    var obj = { };
    
    // 空の配列を作成する
    var arr = [];
    
[/code]


CC BY-SA 3.0
2017-09-06T00:56:37.117
37743
2017-09-06T04:48:28.937
24247
question
javascript
javascriptのオブジェクトと配列について


javascriptでは[リテラル](https://www.google.co.jp/search?q=%E3%83%AA%E3%83%86%E3%83%A9%E3%83%AB)形式でオブジェクト([オブジェクトリテラル](https://www.ajaxtower.jp/js/object/index2.html)、[オブジェクトリテラル表記法](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%AA%E3%83%86%E3%83%A9%E3%83%AB%E8%A1%A8%E8%A8%98%E6%B3%95_vs_JSON))を作成できるので「値を代入している？」と考えてらっしゃるかもしれません。

実際、略式で記載されているものをキチンと書くとこうなります。  
[new演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new)を使用した初期化で作成されたものをインスタンスと呼びます。

[code]

    var obj = new Object();
    var arr = new Array();
    
[/code]

また、別の言語では変数宣言型(Integer,String,Booleanなど)によって代入できる型に制限があったりしますが、  
javascriptの変数宣言である`var`は代入される値によって任意の型に変わります。

[code]

    //number
    var n = 1;
    console.log((typeof n));
    
    //string
    n = "one : " + n;
    console.log((typeof n));
    
    //object(Array)
    n = new Array();
    console.log((typeof n));
    
    //object
    n = new Object();
    console.log((typeof n));
    
    //function
    n = function(){ alert("Hello world"); };
    console.log((typeof n));
[/code]

上記を見て「ArrayもObjectって出てるじゃないか」と思うかもしれませんがjavascriptでのインスタンスは全てobject型となります。  
javascriptにおけるArrayとは下記になります。

  * 真偽判定で偽となる値ではない
  * "object"型である
  * "length"プロパティがある
  * "length"プロパティが数値である
  * "length"プロパティが列挙不可
  * "splice"関数を保持

* * *

オブジェクト名の認識が下記のようなことであればその通りです。

[code]

    var obj = {};
    
    //変数名として
    obj["val1"] = "value one";
    
    //オブジェクト名として
    obj.val2 = "value two";
    
    console.log(obj);
[/code]


CC BY-SA 3.0
2017-09-06T02:44:28.290
37746
2017-09-06T04:48:28.937
2017-09-06T04:48:28.937
37743
answer