Skip to content

Instantly share code, notes, and snippets.

@mbildner
Created February 25, 2015 19:44
Show Gist options
  • Save mbildner/d59984875f68ac08f6b7 to your computer and use it in GitHub Desktop.
Save mbildner/d59984875f68ac08f6b7 to your computer and use it in GitHub Desktop.
Can't figure out why node won't throw in strict mode, when I modify a frozen data structure.
;(function (global) {
'use strict';
function getType (obj) {
if (typeof obj === 'string') {
return 'string';
}
else if (typeof obj === 'number') {
return 'number';
}
else if (Array.isArray(obj)) {
return 'array';
}
else if (obj === true || obj === false) {
return 'boolean';
}
else {
return 'object';
}
}
function deepFreeze (obj) {
switch (getType(obj)) {
case 'string':
case 'number':
case 'boolean':
break;
case 'object':
var keys = Object.keys(obj);
var values = keys.map(function (k) {
return obj[k];
});
values.map(deepFreeze);
Object.freeze(obj);
break;
case 'array':
obj.map(deepFreeze);
Object.freeze(obj);
}
}
var user = {
languages: [
'javascript',
'python'
],
contact: {
phone: '555-555-5555',
email: '[email protected]'
}
};
deepFreeze(user);
user.languages.push('go');
console.log(user);
})(global);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment