javascript オブジェクトのプロパティの追加と削除を不可にする

javascript オブジェクトのプロパティの追加と削除を不可にする

javascriptで、sealを使用して、オブジェクトのプロパティの追加と削除を不可にするサンプルコードを記述してます。

環境

  • OS windows10 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 103.0.5060.134

seal使い方

「seal」を使用すると、オブジェクトのプロパティの追加と削除を不可にすることが可能です。

以下のようにオブジェクトのプロパティを追加と削除するコードを

const site = {
  name: 'mebee',
  url: 'https://mebee.info/'
};

site.title = 'test';

console.log(
  site
);

delete site.url;

console.log(
  site  
);

実行結果

「seal」を使用すると追加と削除ができなくなります。

const site = {
  name: 'mebee',
  url: 'https://mebee.info/'
};

Object.seal(site);

site.title = 'test';

console.log(
  site
);

delete site.url;

console.log(
  site  
);

また、use strictを指定すると、seal後にプロパティを追加および削除しようとするとエラーとなります。

'use strict';

const site = {
  name: 'mebee',
  url: 'https://mebee.info/'
};

Object.seal(site);

site.title = 'test'; // エラーとなる

エラー内容

<chomer 103>
Uncaught TypeError: Cannot add property title, object is not extensible

<firefox 102>
Uncaught TypeError: can't define property "title": Object is not extensible

また、更新は可能となります。

'use strict';

const site = {
  name: 'mebee',
  url: 'https://mebee.info/'
};

Object.seal(site);

site.name = 'test';

console.log(
  site
);

実行結果

確認

プロパティが追加・削除できるかを確認するには「isSealed」を使用します。

'use strict';

const site = {
  name: 'mebee',
  url: 'https://mebee.info/'
};

console.log(Object.isSealed(site)); // false

Object.seal(site);

console.log(Object.isSealed(site)); // true

配列に使用

配列に使用しても、同様のことを実行することが可能です。

const arr = ["aaa","bbb"]

arr[2] = "ccc"

console.log(arr)

console.log( Object.isSealed(arr) ); // false

Object.seal(arr); // 追加と削除を不可

arr[3] = "ddd"

console.log(arr)

console.log( Object.isSealed(arr) ); // true

「’use strict’」を使用すると、エラーが発生します。

'use strict';

const arr = ["aaa","bbb"]

arr[2] = "ccc"

console.log(arr)

console.log( Object.isSealed(arr) ); // false

Object.seal(arr); // 追加と削除を不可

arr[3] = "ddd"
// Uncaught TypeError: Cannot add property 3, object is not extensible

console.log(arr)

console.log( Object.isSealed(arr) ); // true