Object.isFrozen()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
Object.isFrozen() ã¯ãªãã¸ã§ã¯ããåçµããã¦ãããã©ãããå¤å®ãã¾ãã
試ãã¦ã¿ã¾ããã
const object = {
property1: 42,
};
console.log(Object.isFrozen(object));
// äºæ³ãããçµæ: false
Object.freeze(object);
console.log(Object.isFrozen(object));
// äºæ³ãããçµæ: true
æ§æ
Object.isFrozen(obj)
弿°
obj-
確èªããããªãã¸ã§ã¯ãã§ãã
è¿å¤
è«çå¤ã§ãä¸ãããããªãã¸ã§ã¯ããåçµããã¦ãããã©ããã示ãã¾ãã
解説
ãªãã¸ã§ã¯ããåçµç¶æ (frozen) ã¨ã¯ããªãã¸ã§ã¯ããæ¡å¼µå¯è½ã§ã¯ãªãããã¹ã¦ã®ããããã£ã¯æ§æä¸å¯ã§ãããããã¦ãã¹ã¦ã®ãã¼ã¿ããããã£ï¼ããã¯ã²ãã¿ã¼ãã»ãã¿ã¼ã³ã³ãã¼ãã³ããæã¤ã¢ã¯ã»ãµã¼ããããã£ä»¥å¤ã®ãã®ãæãã¾ãï¼ãæ¸ãè¾¼ã¿ä¸å¯ã§ããå ´åã§ãã
ä¾
>Object.isFrozen ã®ä½¿ç¨
// æ°ãããªãã¸ã§ã¯ãã¯æ¡å¼µå¯è½ã§ããã®ã§ãåçµããã¦ãã¾ãã
Object.isFrozen({}); // false
// æ¡å¼µå¯è½ã§ã¯ãªã空ã®ãªãã¸ã§ã¯ãã¯ãä»ã«ä½ãããªãã¦ã
// åçµããã¦ãã¾ã
const vacuouslyFrozen = Object.preventExtensions({});
Object.isFrozen(vacuouslyFrozen); // true
// ããããã£ãã²ã¨ã¤æã¤æ°ãããªãã¸ã§ã¯ããæ¡å¼µå¯è½ã§ããã
// ããããåçµããã¦ãã¾ãã
const oneProp = { p: 42 };
Object.isFrozen(oneProp); // false
// ãªãã¸ã§ã¯ããæ¡å¼µä¸å¯ã«ãã¦ããããã¯åçµããã¾ãã
// ãªããªããã¾ã ããããã£ãè¨å®å¤æ´å¯è½
// (ãã¤æ¸ãè¾¼ã¿å¯è½) ã§ããããã§ã
Object.preventExtensions(oneProp);
Object.isFrozen(oneProp); // false
// ...ãããããããã£ãåé¤ããã¨ããã®ãªãã¸ã§ã¯ãã¯
// ä»ã«ä½ãããªãã¦ãåçµããã¾ã
delete oneProp.p;
Object.isFrozen(oneProp); // true
// æ¸ãè¾¼ã¿ä¸å¯ã§ãããè¨å®å¤æ´å¯è½ãªããããã£ãæã¤ã
// æ¡å¼µä¸å¯ã®ãªãã¸ã§ã¯ãã¯ãåçµããã¦ãã¾ãã
const nonWritable = { e: "plep" };
Object.preventExtensions(nonWritable);
Object.defineProperty(nonWritable, "e", {
writable: false,
}); // æ¸ãè¾¼ã¿ä¸å¯ã«ãã¾ã
Object.isFrozen(nonWritable); // false
// ããããã£ãæ§æä¸å¯ã«ããã¨ã
// ãªãã¸ã§ã¯ãã¯åçµããã¾ã
Object.defineProperty(nonWritable, "e", {
configurable: false,
}); // æ§æä¸å¯ã«ãã¾ã
Object.isFrozen(nonWritable); // true
// æ§æä¸å¯ã§ãããæ¸ãè¾¼ã¿å¯è½ãªããããã£ãæã¤ã
// æ¡å¼µä¸å¯ã®ãªãã¸ã§ã¯ãã¯ããã¯ãåçµããã¦ãã¾ãã
const nonConfigurable = { release: "the kraken!" };
Object.preventExtensions(nonConfigurable);
Object.defineProperty(nonConfigurable, "release", {
configurable: false,
});
Object.isFrozen(nonConfigurable); // false
// ããããã£ãæ¸ãè¾¼ã¿ä¸å¯ã«ããã¨ããªãã¸ã§ã¯ãã¯
// åçµããã¾ã
Object.defineProperty(nonConfigurable, "release", {
writable: false,
});
Object.isFrozen(nonConfigurable); // true
// è¨å®å¤æ´å¯è½ãªã¢ã¯ã»ãµã¼ããããã£ãæã¤æ¡å¼µä¸å¯ã®
// ãªãã¸ã§ã¯ãã¯ãåçµããã¦ãã¾ãã
const accessor = {
get food() {
return "yum";
},
};
Object.preventExtensions(accessor);
Object.isFrozen(accessor); // false
// ããããã£ãæ§æä¸å¯ã«ããã¨ããªãã¸ã§ã¯ãã¯åçµããã¾ã
Object.defineProperty(accessor, "food", {
configurable: false,
});
Object.isFrozen(accessor); // true
// ãªãããªãã¸ã§ã¯ããåçµãããã£ã¨ãç°¡åãªæ¹æ³ã¯ã
// Object.freeze ãå¼ã³åºããã¨ã§ã
const frozen = { 1: 81 };
Object.isFrozen(frozen); // false
Object.freeze(frozen);
Object.isFrozen(frozen); // true
// å®ç¾©ã«ããã¨ãåçµããããªãã¸ã§ã¯ãã¯æ¡å¼µä¸å¯ã§ã
Object.isExtensible(frozen); // false
// ã¾ããåçµããããªãã¸ã§ã¯ãã¯å°å°ããã¦ãã¾ã
Object.isSealed(frozen); // true
ãªãã¸ã§ã¯ã以å¤ã®åå¼·å¶
ES5 ã§ã¯ããã®ã¡ã½ããã®å¼æ°ããªãã¸ã§ã¯ãã§ã¯ãªãå ´åï¼ããªããã£ãã®å ´åï¼ã TypeError ãçºçãã¾ãã ES2015 以éã§ã¯ããªãã¸ã§ã¯ãã§ãªã弿°ã¯ããããåçµãããé常ã®ãªãã¸ã§ã¯ãã§ãããã®ããã«æ±ãããåã« true ãè¿ãã¾ãã
Object.isFrozen(1);
// TypeError: 1 is not an object (ES5 code)
Object.isFrozen(1);
// true (ES2015 code)
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.isfrozen> |