Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Don't use instanceof in lib/util.js "is" checks.
Browse files Browse the repository at this point in the history
While using `instanceof`, these functions could easily be faked with something
like:  Object.create(Date.prototype)

So let's just not use it at all. A little slower, but these functions are only
used in the REPL / for debugging so it's OK.

Fixes #1941.
Fixes #1942.
  • Loading branch information
TooTallNate authored and koichik committed Oct 26, 2011
1 parent 194511f commit 2dbb470
Showing 1 changed file with 7 additions and 9 deletions.
16 changes: 7 additions & 9 deletions lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -378,31 +378,29 @@ function reduceToSingleString(output, base, braces) {
}


// NOTE: These type checking functions intentionally don't use `instanceof`
// because it is fragile and can be easily faked with `Object.create()`.
function isArray(ar) {
return ar instanceof Array ||
Array.isArray(ar) ||
(ar && ar !== Object.prototype && isArray(ar.__proto__));
return Array.isArray(ar) ||
(typeof ar === 'object' && objectToString(ar) === '[object Array]');
}
exports.isArray = isArray;


function isRegExp(re) {
return re instanceof RegExp ||
(typeof re === 'object' && objectToString(re) === '[object RegExp]');
return typeof re === 'object' && objectToString(re) === '[object RegExp]';
}
exports.isRegExp = isRegExp;


function isDate(d) {
return d instanceof Date ||
(typeof d === 'object' && objectToString(d) === '[object Date]');
return typeof d === 'object' && objectToString(d) === '[object Date]';
}
exports.isDate = isDate;


function isError(e) {
return e instanceof Error ||
(typeof e === 'object' && objectToString(e) === '[object Error]');
return typeof e === 'object' && objectToString(e) === '[object Error]';
}
exports.isError = isError;

Expand Down

0 comments on commit 2dbb470

Please sign in to comment.