Просто любопытно:
- 4 instanceof Number = > false
- new Number (4) instanceof Number = > true?
Почему это? То же самое со строками:
-
'some string' instanceof String
возвращает false -
new String('some string') instanceof String
= > true -
String('some string') instanceof String
также возвращает false -
('some string').toString instanceof String
также возвращает false
Для объектов, массивов или типов функций оператор instanceof работает так, как ожидалось. Я просто не знаю, как это понимать.
[ новые идеи]
Object.prototype.is = function() {
var test = arguments.length ? [].slice.call(arguments) : null
,self = this.constructor;
return test ? !!(test.filter(function(a){return a === self}).length)
: (this.constructor.name ||
(String(self).match ( /^function\s*([^\s(]+)/im )
|| [0,'ANONYMOUS_CONSTRUCTOR']) [1] );
}
// usage
var Newclass = function(){}; // anonymous Constructor function
var Some = function Some(){}; // named Constructor function
(5).is(); //=> Number
'hello world'.is(); //=> String
(new Newclass()).is(); //=> ANONYMOUS_CONSTRUCTOR
(new Some()).is(); //=> Some
/[a-z]/.is(); //=> RegExp
'5'.is(Number); //=> false
'5'.is(String); //=> true