教えて!GAS!

GASの基礎知識・書き方について紹介します。

Google Apps ScriptでのObjectオブジェクトの種類

Objectオブジェクトは、様々なデータや値を格納するために使われます。

オブジェクト一覧

主なオブジェクトを紹介します。

メンバー 説明
Object.create(プロトタイプ, プロパティ記述) 指定されたプロトタイプオブジェクトとプロパティを持つ新しいオブジェクトを作成します
Object.defineProperty(対象オブジェクト, プロパティ名, プロパティ記述) オブジェクトに新しいプロパティを定義するか、既存のプロパティを変更します
Object.defineProperties(対象オブジェクト, プロパティ記述オブジェクト) オブジェクトに複数の新しいプロパティを定義するか、既存のプロパティを変更します
Object.getOwnPropertyDescriptor(対象オブジェクト, プロパティ名) オブジェクトの特定のプロパティについての記述を取得します
Object.getOwnPropertyNames(対象オブジェクト) オブジェクト自身のすべてのプロパティの名前を配列として返します
Object.getPrototypeOf(対象オブジェクト) 指定されたオブジェクトのプロトタイプ(内部Prototypeプロパティの値)を返します
Object.isExtensible(対象オブジェクト) オブジェクトが拡張可能かどうかを示す真偽値を返します
Object.isFrozen(対象オブジェクト) オブジェクトが凍結されているかどうかを示す真偽値を返します
Object.isSealed(対象オブジェクト) オブジェクトが封印されているかどうかを示す真偽値を返します
Object.keys(対象オブジェクト) オブジェクト自身の列挙可能なプロパティ名を配列として返します
Object.preventExtensions(対象オブジェクト) オブジェクトの拡張を禁止します
Object.seal(対象オブジェクト) オブジェクトを封印し、既存のプロパティを変更不可にします
Object.freeze(対象オブジェクト) オブジェクトを凍結し、プロパティの変更を完全に禁止します
Object.values(対象オブジェクト) オブジェクトの列挙可能なプロパティの値を配列として返します
Object.entries(対象オブジェクト) オブジェクトの列挙可能なプロパティのキーと値のペアを配列として返します

プログラミング例

具体的なプログラミング例を紹介します。

Object.create(プロトタイプ, プロパティ記述)

function 作成() {
    let プロトタイプ = {
        言語: "日本語"
    };
    let 新オブジェクト = Object.create(プロトタイプ, {
        名前: {
            value: "太郎",
            writable: true,
            enumerable: true,
            configurable: true
        }
    });
    console.log(新オブジェクト.名前); // "太郎"
    console.log(新オブジェクト.言語); // "日本語"(プロトタイプから継承)
}

Object.defineProperty(対象オブジェクト, プロパティ名, プロパティ記述)

function プロパティ定義() {
    let 人 = {};
    Object.defineProperty(人, "名前", {
        value: "太郎",
        writable: false, // 書き込み不可
        enumerable: true,
        configurable: true
    });
    console.log(人.名前); // "太郎"
    人.名前 = "花子"; // 無視される
    console.log(人.名前); // "太郎"
}

Object.defineProperties(対象オブジェクト, プロパティ記述オブジェクト)

function 複数プロパティ定義() {
    let 人 = {};
    Object.defineProperties(人, {
        名前: {
            value: "太郎",
            writable: true,
            enumerable: true,
            configurable: true
        },
        年齢: {
            value: 25,
            writable: true,
            enumerable: true,
            configurable: true
        }
    });
    console.log(人.名前); // "太郎"
    console.log(人.年齢); // 25
}

Object.getOwnPropertyDescriptor(対象オブジェクト, プロパティ名)

function プロパティ記述取得() {
    let 人 = {
        名前: "太郎"
    };
    let 記述 = Object.getOwnPropertyDescriptor(人, "名前");
    console.log(記述);
    /*
    出力:
    {
      value: '太郎',
      writable: true,
      enumerable: true,
      configurable: true
    }
    */
}

Object.getOwnPropertyNames(対象オブジェクト)

function プロパティ名取得() {
    let 人 = {
        名前: "太郎",
        年齢: 25
    };
    let プロパティ名リスト = Object.getOwnPropertyNames(人);
    console.log(プロパティ名リスト); // ["名前", "年齢"]
}

Object.getPrototypeOf(対象オブジェクト)

function プロトタイプ取得() {
    let プロトタイプ = {
        言語: "日本語"
    };
    let 新オブジェクト = Object.create(プロトタイプ);
    let 取得されたプロトタイプ = Object.getPrototypeOf(新オブジェクト);
    console.log(取得されたプロトタイプ); // { 言語: "日本語" }
}

Object.isExtensible(対象オブジェクト)

function 拡張可能確認() {
    let 人 = {
        名前: "太郎"
    };
    console.log(Object.isExtensible(人)); // true
    Object.preventExtensions(人);
    console.log(Object.isExtensible(人)); // false
}

Object.isFrozen(対象オブジェクト)

function 凍結確認() {
    let 人 = {
        名前: "太郎"
    };
    console.log(Object.isFrozen(人)); // false
    Object.freeze(人);
    console.log(Object.isFrozen(人)); // true
}

Object.isSealed(対象オブジェクト)

function 封印確認() {
    let 人 = {
        名前: "太郎"
    };
    console.log(Object.isSealed(人)); // false
    Object.seal(人);
    console.log(Object.isSealed(人)); // true
}

Object.keys(対象オブジェクト)

function キー取得() {
    let 人 = {
        名前: "太郎",
        年齢: 25
    };
    let キーリスト = Object.keys(人);
    console.log(キーリスト); // ["名前", "年齢"]
}

Object.preventExtensions(対象オブジェクト)

function 拡張禁止() {
    let 人 = {
        名前: "太郎"
    };
    Object.preventExtensions(人);
    人.年齢 = 25; // 追加されない
    console.log(人.年齢); // undefined
}

Object.seal(対象オブジェクト)

function 封印() {
    let 人 = {
        名前: "太郎"
    };
    Object.seal(人);
    人.年齢 = 25; // 追加されない
    console.log(人.年齢); // undefined
    delete 人.名前; // 削除できない
    console.log(人.名前); // "太郎"
}

Object.freeze(対象オブジェクト)

function 凍結() {
    let 人 = {
        名前: "太郎"
    };
    Object.freeze(人);
    人.名前 = "花子"; // 変更されない
    console.log(人.名前); // "太郎"
}

Object.values(対象オブジェクト)

function 値取得() {
    let 人 = {
        名前: "太郎",
        年齢: 25
    };
    let 値リスト = Object.values(人);
    console.log(値リスト); // ["太郎", 25]
}

Object.entries(対象オブジェクト)

function エントリ取得() {
    let 人 = {
        名前: "太郎",
        年齢: 25
    };
    let エントリリスト = Object.entries(人);
    console.log(エントリリスト); // [["名前", "太郎"], ["年齢", 25]]
}

まとめ

Objectオブジェクトのメソッドやプロパティを使用することで、オブジェクトの操作や管理が可能になります。