最佳答案
只是好奇:
- 为什么会这样?-字符串也是一样:
'some string' instanceof String
返回 falsenew String('some string') instanceof String
= > trueString('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