diff --git a/snippets/isDeepFrozen.md b/snippets/isDeepFrozen.md new file mode 100644 index 000000000..24157232b --- /dev/null +++ b/snippets/isDeepFrozen.md @@ -0,0 +1,25 @@ +--- +title: isDeepFrozen +tags: object,recursion,intermediate +--- + +Checks if an object is deeply frozen + +Use recursion. +Use `Object.isFrozen()` on the given object. +Use `Object.keys()`, `Array.prototype.every()` to check that all keys are either deeply frozen objects or non-object values. + +```js +const isDeepFrozen = obj => + Object.isFrozen(obj) && + Object.keys(obj).every( + prop => typeof obj[prop] !== 'object' || isDeepFrozen(obj[prop]) + ); +``` + +```js +const x = Object.freeze({ a: 1 }); +const y = Object.freeze({ b: { c: 2 } }); +isDeepFrozen(x); // true +isDeepFrozen(y); // false +```