オブジェクトのプロパティ削除 | delete演算子 | JavaScript 超完全入門 基本から発展までのすべて

スポンサーリンク
スポンサーリンク

delete演算子とは?

JavaScriptでは、オブジェクトのプロパティを削除するためにdelete演算子を使用します。この演算子は、指定されたオブジェクトのプロパティを削除し、削除が成功した場合はtrueを返します。delete演算子を使用することで、動的にオブジェクトの構造を変更することができます。

delete演算子の基本的な使い方

delete演算子は、次のような構文で使用します。

delete オブジェクト.プロパティ名;
delete オブジェクト["プロパティ名"];

この構文を使用して、オブジェクトの特定のプロパティを削除できます。次に、具体的な例を見てみましょう。

基本的な使用例

次の例では、オブジェクトから特定のプロパティを削除します。

let person = {
    name: "John",
    age: 30,
    job: "Developer"
};

console.log(person);  // {name: "John", age: 30, job: "Developer"}

delete person.job;  // jobプロパティを削除

console.log(person);  // {name: "John", age: 30}

この例では、personオブジェクトからjobプロパティを削除しています。delete演算子を使うと、オブジェクトからプロパティが消えます。

配列に対するdelete演算子の動作

delete演算子を配列の要素に使用することも可能ですが、配列から要素を完全に削除するわけではなく、その位置にundefinedを残すことになります。

let numbers = [1, 2, 3, 4];

delete numbers[2];  // 3番目の要素を削除

console.log(numbers);  // [1, 2, undefined, 4]

この例では、配列の3番目の要素をdeleteしていますが、要素が削除された位置にはundefinedが残ります。配列の要素を完全に削除して要素を詰めたい場合は、Array.prototype.splice()メソッドを使用します。

constで宣言されたオブジェクトのプロパティ削除

注意すべき点として、constで宣言されたオブジェクトでも、プロパティの削除は可能です。constで宣言されたオブジェクトは、再代入はできませんが、プロパティの追加や削除は許可されています。

const car = {
    brand: "Toyota",
    model: "Corolla"
};

delete car.model;

console.log(car);  // {brand: "Toyota"}

この例では、constで宣言されたcarオブジェクトからmodelプロパティを削除しています。constは再代入を防ぎますが、プロパティの操作は可能です。

プロトタイプチェーン上のプロパティ

delete演算子は、オブジェクト自体に存在するプロパティを削除しますが、プロトタイプチェーン上のプロパティを削除することはできません。もしプロトタイプに存在するプロパティを削除しようとすると、削除は無効です。

function Animal() {
    this.legs = 4;
}

let dog = new Animal();

console.log(dog.legs);  // 4

delete dog.legs;

console.log(dog.legs);  // undefined(インスタンスのプロパティは削除された)

delete Animal.prototype.legs;

console.log(dog.legs);  // undefined(プロトタイプのプロパティは削除できない)

この例では、dogオブジェクトのプロパティを削除することは可能ですが、プロトタイプに存在するプロパティは削除できません。

delete演算子の結果

delete演算子は、プロパティが正常に削除された場合にtrueを返します。削除できないプロパティ(例:プロトタイプチェーン上のプロパティ)に対しては、falseを返します。

let obj = { name: "Alice" };

console.log(delete obj.name);  // true(削除成功)
console.log(delete obj.age);   // true(存在しないプロパティの削除はtrueを返す)
console.log(delete Object.prototype);  // false(プロトタイプチェーンのプロパティは削除できない)

まとめ

JavaScriptのdelete演算子を使うと、オブジェクトのプロパティを簡単に削除できますが、配列の要素削除やプロトタイプチェーンの操作に関しては注意が必要です。delete演算子は、オブジェクト自体のプロパティの削除には有効ですが、プロトタイプチェーンに属するプロパティには適用できません。配列の要素を完全に削除したい場合は、splice()メソッドなどを使うのが適切です。