seal【封印】
isSealed【封印 判定】
freeze【プロパティ凍結】
isFrozen【プロパティ凍結 判定】
preventExtensions【拡張(プロパティ追加)不可 設定】
isExtensible【拡張(プロパティ追加)可否】
seal【封印】
isSealed【封印 判定】
メモ
概要
- オブジェクトの封印と判定
- 封印の解除は不可
- プロパティの変更・追加・削除 防止
設定
判定プロパティ操作 strict モード
エラー変更 追加 削除 seal【封印】
isSealed【封印 判定】● × × TypeError 例外 freeze【プロパティ凍結】
isFrozen【プロパティ凍結 判定】× × × TypeError 例外 preventExtensions【拡張(プロパティ追加)不可 設定】
isExtensible【拡張(プロパティ追加)可否】● × ● TypeError 例外
外部リンク
- ECMA-262 (英語)
Object.seal ( O ) ES2024 (15) ES2023 (14) ES2022 (13) Object.isSealed ( O ) ES2024 (15) ES2023 (14) ES2022 (13) The Strict Mode of ECMAScript ES2024 (15) ES2023 (14) ES2022 (13)
構文
Object.seal( O )
入力のO (オブジェクト)
O オブジェクト
TypeError 例外
O (オブジェクト)がオブジェクト以外
O (オブジェクト)がオブジェクト変換不可
Object.isSealed( O )
封印の判定結果 (false:封印 / true:その他)
O オブジェクト
TypeError 例外 O (オブジェクト)がオブジェクト以外
例
// 封印なし
const obj1 = {
prop1: 'Value1',
prop2: 'Value2',
};
console.log(Object.isSealed(obj1));
// 出力:false
console.log(obj1);
// 出力:{prop1: 'Value1', prop2: 'Value2'}
// プロパティの変更・追加・削除
obj1.prop1 = 'ValueX'; // 変更 (成功)
obj1.propZ = 'ValueZ'; // 追加 (成功)
delete obj1.prop2; // 削除 (成功)
console.log(obj1);
// 出力:{prop1: 'ValueX', propZ: 'ValueZ'}
// 封印
obj2 = {
prop1: 'Value1',
prop2: 'Value2',
};
Object.seal(obj2);
console.log(Object.isSealed(obj2));
// 出力:true
console.log(obj2);
// 出力:{prop1: 'Value1', prop2: 'Value2'}
// プロパティの変更・追加・削除
obj2.prop1 = 'ValueX'; // 変更 (成功)
obj2.propZ = 'ValueZ'; // 追加 (失敗)
delete obj2.prop2; // 削除 (失敗)
console.log(obj2);
// 出力:{prop1: 'ValueX', prop2: 'Value2'}
// strict モード
strictMode();
function strictMode() {
'use strict';
try {
obj2.propZ = 'ValueZ';
} catch(e) {
console.log(e);
// TypeError: can't define property "propZ": Object is not extensible
}
try {
delete obj2.prop2;
} catch(e) {
console.log(e);
// TypeError: property "prop2" is non-configurable and can't be deleted
}
}
freeze【プロパティ凍結】
isFrozen【プロパティ凍結 判定】
メモ
概要
- オブジェクトの凍結と判定
- 凍結の解除は不可
- プロパティの変更・追加・削除 防止
設定
判定プロパティ操作 strict モード
エラー変更 追加 削除 seal【封印】
isSealed【封印 判定】● × × TypeError 例外 freeze【プロパティ凍結】
isFrozen【プロパティ凍結 判定】× × × TypeError 例外 preventExtensions【拡張(プロパティ追加)不可 設定】
isExtensible【拡張(プロパティ追加)可否】● × ● TypeError 例外
外部リンク
- ECMA-262 (英語)
Object.freeze ( O ) ES2024 (15) ES2023 (14) ES2022 (13) Object.isFrozen ( O ) ES2024 (15) ES2023 (14) ES2022 (13) The Strict Mode of ECMAScript ES2024 (15) ES2023 (14) ES2022 (13)
構文
Object.freeze( O )
入力のO (オブジェクト)
O オブジェクト
TypeError 例外 O (オブジェクト)がオブジェクト以外
Object.isFrozen( O )
凍結の判定結果 (false:凍結 / true:その他)
O オブジェクト
TypeError 例外 O (オブジェクト)がオブジェクト以外
例
// 凍結なし
const obj1 = {
prop1: 'Value1',
prop2: 'Value2',
};
console.log(Object.isFrozen(obj1));
// 出力:false
console.log(obj1);
// 出力:Object { prop1: "Value1", prop2: "Value2" }
// プロパティの変更・追加・削除
obj1.prop1 = 'ValueX'; // 変更 (成功)
obj1.propZ = 'ValueZ'; // 追加 (成功)
delete obj1.prop2; // 削除 (成功)
console.log(obj1);
// 出力:Object { prop1: "ValueX", propZ: "ValueZ" }
// 凍結
obj2 = {
prop1: 'Value1',
prop2: 'Value2',
};
Object.freeze(obj2);
console.log(Object.isFrozen(obj2));
// 出力:true
console.log(obj2);
// 出力:{prop1: 'Value1', prop2: 'Value2'}
// プロパティの変更・追加・削除
obj2.prop1 = 'ValueX'; // 変更 (失敗)
obj2.propZ = 'ValueZ'; // 追加 (失敗)
delete obj2.prop2; // 削除 (失敗)
console.log(obj2);
// 出力:{Object { prop1: "Value1", prop2: "Value2" }
// strict モード
strictMode();
function strictMode() {
'use strict';
try {
obj2.prop1 = 'ValueXX';
} catch(e) {
console.log(e);
// TypeError: "prop1" is read-only
}
try {
obj2.propZ = 'ValueZ';
} catch(e) {
console.log(e);
// TypeError: can't define property "propZ": Object is not extensible
}
try {
delete obj2.prop2;
} catch(e) {
console.log(e);
// TypeError: property "prop2" is non-configurable and can't be deleted
}
}
preventExtensions【拡張(プロパティ追加)不可 設定】
isExtensible【拡張(プロパティ追加)可否】
メモ
概要
- オブジェクトの拡張不可と拡張判定
- オブジェクトのデフォルトは拡張可
- 拡張不可の解除は不可
- プロパティの変更・追加・削除 防止
設定
判定プロパティ操作 strict モード
エラー変更 追加 削除 seal【封印】
isSealed【封印 判定】● × × TypeError 例外 freeze【プロパティ凍結】
isFrozen【プロパティ凍結 判定】× × × TypeError 例外 preventExtensions【拡張(プロパティ追加)不可 設定】
isExtensible【拡張(プロパティ追加)可否】● × ● TypeError 例外
外部リンク
- ECMA-262 (英語)
Object.preventExtensions ( O ) ES2024 (15) ES2023 (14) ES2022 (13) Object.isExtensible ( O ) ES2024 (15) ES2023 (14) ES2022 (13) The Strict Mode of ECMAScript ES2024 (15) ES2023 (14) ES2022 (13)
構文
Object.preventExtensions( O )
入力のO (オブジェクト)
O オブジェクト
TypeError 例外O (オブジェクト)がオブジェクト以外
Object.isExtensible( O )
拡張の可否 (false:拡張不可 / true:その他)
O オブジェクト
TypeError 例外 O (オブジェクト)がオブジェクト以外
例
// 拡張(プロパティ追加)不可なし
const obj1 = {
prop1: 'Value1',
prop2: 'Value2',
};
console.log(Object.isExtensible(obj1));
// 出力:true
console.log(obj1);
// 出力:Object { prop1: "Value1", prop2: "Value2" }
// プロパティの変更・追加・削除
obj1.prop1 = 'ValueX'; // 変更 (成功)
obj1.propZ = 'ValueZ'; // 追加 (成功)
delete obj1.prop2; // 削除 (成功)
console.log(obj1);
// 出力:Object { prop1: "ValueX", propZ: "ValueZ" }
// 拡張(プロパティ追加)不可
obj2 = {
prop1: 'Value1',
prop2: 'Value2',
};
Object.preventExtensions(obj2);
console.log(Object.isExtensible(obj2));
// 出力:false
console.log(obj2);
// 出力:{prop1: 'Value1', prop2: 'Value2'}
// プロパティの変更・追加・削除
obj2.prop1 = 'ValueX'; // 変更 (成功)
obj2.propZ = 'ValueZ'; // 追加 (失敗)
delete obj2.prop2; // 削除 (成功)
console.log(obj2);
// 出力:Object { prop1: "ValueX" }
// strict モード
strictMode();
function strictMode() {
'use strict';
try {
obj2.propZ = 'ValueZ';
} catch(e) {
console.log(e);
// TypeError: can't define property "propZ": Object is not extensible
}
}