Merge pull request #234 from bocoup/fix-writable-check

Fix bug in `isWritable` utility function
This commit is contained in:
Brian Terlson 2015-04-21 12:13:39 -07:00
commit 5006855944
1 changed files with 12 additions and 7 deletions

View File

@ -31,7 +31,7 @@ function isWritable(obj, name, verifyProp, value) {
var newValue = value || "unlikelyValue"; var newValue = value || "unlikelyValue";
var hadValue = Object.prototype.hasOwnProperty.call(obj, name); var hadValue = Object.prototype.hasOwnProperty.call(obj, name);
var oldValue = obj[name]; var oldValue = obj[name];
var result; var writeSucceeded;
try { try {
obj[name] = newValue; obj[name] = newValue;
@ -41,16 +41,21 @@ function isWritable(obj, name, verifyProp, value) {
} }
} }
result = (verifyProp && isEqualTo(obj, verifyProp, newValue)) || writeSucceeded = (verifyProp && isEqualTo(obj, verifyProp, newValue)) ||
isEqualTo(obj, name, newValue); isEqualTo(obj, name, newValue);
if (hadValue) { // Revert the change only if it was successful (in other cases, reverting
obj[name] = oldValue; // is unnecessary and may trigger exceptions for certain property
} else { // configurations)
delete obj[name]; if (writeSucceeded) {
if (hadValue) {
obj[name] = oldValue;
} else {
delete obj[name];
}
} }
return result; return writeSucceeded;
} }
function verifyEqualTo(obj, name, value) { function verifyEqualTo(obj, name, value) {