注意:
(1)instanceof 会沿着原型链查找,只要在原型链上返回的都是true
(2)注意基本类型的检测
constructor 属性返回对创建此对象的数组函数的引用
3.4 使用Object.prototype.toString.call Object.prototype.toString.call(undefined);// "[object Undefined]" Object.prototype.toString.call(null);// "[object Null]" Object.prototype.toString.call(1);// "[object Number]" Object.prototype.toString.call(NaN);// "[object Number]" Object.prototype.toString.call("1");// "[object String]" Object.prototype.toString.call({});// "[object Object]" Object.prototype.toString.call([]);// "[object Array]" Object.prototype.toString.call(Math);//"[object Math]" Object.prototype.toString.call(JSON);//"[object JSON]" Object.prototype.toString.call(Date);// "[object Function]" Object.prototype.toString.call(new Date());// "[object Date]" Object.prototype.toString.call(new RegExp());//"[object RegExp]" Object.prototype.toString.call(function () {});// "[object Function]" Object.prototype.toString.call(window);// "[object global]"Object.prototype.toString.call(xxx)返回的是字符串
3.5 检测一个变量是否是数组类型先检测浏览器是否支持Array.isArray(), 如果不支持则用Obejct.prototype.toString.call方法
function isArray(value){ if (typeof Array.isArray === "function") { return Array.isArray(value); } else { return Object.prototype.toString.call(value) === "[object Array]"; } }参考:
《Javascript 高级程序设计(第三版)》