objectとObject、小文字と大文字の違いだけだと思ってませんか?

2024/12/10に公開

2024年12月号 objectとObject

はじめに(対象読者)

JavaScriptの勉強を始めるぞ!と意気込み、環境構築をして勉強を進めていくうちに
[object,Object] とコンソールに出てきて謎だな...となっている人に向けての記事となります。

objectとObjectって何が違うの?

object(小文字) とは「型」を表す一般的な概念

Object(大文字) とはオブジェクト(名前(キー)と値(バリュー)が対になったプロパティ)を生成したり扱うための機能が詰まったコンストラクタ

コードを参照しながら、説明していきたいと思います。

const obj = {key:"value"};
console.log(obj.toString());//[object Object]
console.log(String(obj));//[object Object]

Stringコンストラクタ関数とtoStringメソッドの結果は同じになります。では、toStringを再定義してしてみることにしましょう。

const customObject={
    toString(){
        return "custom value";
    }
};
console.log(String(customObject)); //"custom value"

上記のようにStingコンストラクタ関数で文字列にしてみると、toStringメソッドの返り値であることが分かります。今のコードを書き換えてみることも可能です。

const customObject = {
    toString: function f() {
        return "custom value"
    }
};
console.log(`${customObject}`); //"custom value"

スッと入っていきやすのが、どちらかは読者の方によると思います。

objectの中身は?

また、objのプロパティを空になるように定義し、中身を見てみると

このようにたくさんのPrototypeが生えていることに気づきます。

これを用いると、

const obj = {
    "one": 1,
    "two": 2,
    "three": 3
};
// `Object.keys`はキーを列挙した配列を返す
console.log(Object.keys(obj)); // => ["one", "two", "three"]

// `Object.values`は値を列挙した配列を返す
console.log(Object.values(obj)); // => [1, 2, 3]

// `Object.entries`は[キー, 値]の配列を返す
console.log(Object.entries(obj)); // => [["one", 1], ["two", 2], ["three", 3]]

このように様々な情報を得ることができます。

参考文献

詳しくは↓
https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/Object_prototypes

もっとわかりやすく簡単に知るにはこちらもおすすめです。↓
https://jsprimer.net/basic/object/#object-instance-object

Discussion