STUDY MEMO

学習のメモ書き

<JavaScript> オブジェクト

オブジェクト

オブジェクトの生成は{}で任意のプロパティの組を囲むことで定義する。
オブジェクトの後に「.キー」または「[]」のなかにキーを記載することでプロパティの値にアクセスできる。
また、プロパティの削除はdeleteを使用することで実施できる。

test.js

let obj = {
  "fruits": "りんご",
  "vegetables": "きゅうり"
};

// オブジェクトの後に.キーを置く
console.log(obj.fruits);
// オブジェクトの後[]をおいて、[]のなかにキーを置く
console.log(obj["vegetables"]);


// プロパティの削除
delete obj["fruits"];
console.log(obj.fruits);

実行結果

$ node test.js
りんご
きゅうり
undefined

プロパティの存在を確認

in演算子を使う場合

in演算子は、指定されたプロパティが、指定されたオブジェクトに存在する場合trueを返す。

let obj = {
  "fruits": "りんご",
  "vegetables": "きゅうり"
};

let key = "fruits";
// let key = "bana";
if (key in obj) {
  console.log("true");
} else {
  console.log("false");
}

実行結果

$ node test.js
true
// let key = "bana"の時はfalseになる。

Object.prototype.hasOwnProperty()を使う場合

hasOwnProperty() メソッドは、オブジェクトが指定されたプロパティを持っているかどうかを示す。

let obj = {
  "fruits": "りんご",
  "vegetables": "きゅうり"
};

console.log(obj.hasOwnProperty("fruits"));
console.log(obj.hasOwnProperty("bana"));

実行結果

$ node test.js
true
false

プロパティの保護

例えconstで指定していても、プロパティが修正されてしまうことがある。
それを防ぐためにはObject.freeze()メソッドを使用する。 Object.freeze()メソッドはオブジェクトを凍結し、凍結されたオブジェクトは変更できなくなる。
オブジェクトを凍結すると、新しいプロパティを追加したり、既存のプロパティを削除したりすることができなくなり、既存のプロパティに対する列挙可否、構成可否、書き込み可否の変更ができなくなり、既存のプロパティの値が変更できなくなる。

let obj = {
  "fruits": "りんご",
  "vegetables": "きゅうり"
};

Object.freeze(obj);

obj.fruits = "hi";
console.log(obj);

実行結果

$ node test.js
{ fruits: 'りんご', vegetables: 'きゅうり' }

無名関数の要素化

オブジェクトは名前のない関数(無名関数)を要素化できる。

// オブジェクトの宣言
const o = {
};

o["function"] = function () {
  console.log("well done")
};
o.function();
console.log(o);

実行結果

$ node test.js
well done
{ function: [Function (anonymous)] }

参考

in - JavaScript | MDN

Object.prototype.hasOwnProperty() - JavaScript | MDN

Object.freeze() - JavaScript | MDN