'use strict';

var toStr = Number.prototype.toString;

module.exports = function isNumberObject(value) {
	if (typeof value === 'number') { return true; }
	if (typeof value !== 'object') { return false; }
	try {
		toStr.call(value);
		return true;
	} catch (e) {
		return false;
	}
};

@@ -46,16 +46,152 @@
 oString;
+%0Avar tryNumberObject = function tryNumberObject(value) %7B%0A%09try %7B%0A%09%09toStr.call(value);%0A%09%09return true;%0A%09%7D catch (e) %7B%0A%09%09return false;%0A%09%7D%0A%7D;
 %0A%0Amodule
@@ -338,83 +338,38 @@
  %7D%0A%09
-try %7B%0A%09%09toStr.call(value);%0A%09%09return true;%0A%09%7D catch (e) %7B%0A%09%09return false;%0A%09%7D
+return tryNumberObject(value);
 %0A%7D;%0A

Improve optimizability of the non-try/catch part.