// 判断是不是数组
// ① 方法简单有效,缺点是IE8及以下版本浏览器不兼容
var arr = [3, 4, 5, 6]
var isArr = Array.isArray(arr)
console.log(isArr)
// ②
var arr = [3, 4, 5, 6]
var isArr = arr instanceof Array
console.log(isArr)
// ③
var arr = [3, 4, 5, 6]
var isArr = arr.constructor === Array
console.log(isArr)
console.log(typeof arr)
// 判断数组封装的方法
function isArray(obj) {
return typeof obj == 'object' && obj.constructor == Array
}
// ④第二第三种方法也有列外情况,比如在跨框架iframe的时候使用页面中的数组时会失败,
// 因为在不同的框架iframe中,创建的数组是不会相互共享其prototype属性的;当第二第
// 三种方法也不能用时,可以使用最通用的方法 Object.prototype.toString.call()
function isArray(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
}//仅判断Array
function isType(data, type) {
return Object.prototype.toString.call(data) === "[object " + type + "]";
} //通用判断方法
// 方法中的call()可以换成apply(),不能直接用toString调用,
// 因为从原型链的角度讲,所有对象的原型链最终都指向了 Object,
// 按照JS变量查找规则,其他对象应该也可以直接访问到 Object 的
// toString方法,但是大部分的对象都实现了自身的 toString 方
// 法,这样就可能会导致 Object 的 toString 被终止查找,因此要用
// call或apply 来强制调用Object 的 toString 方法
typeof的一些坑 typeof 判断Array和null等特殊类型都会输出Object,typeof 返回值有六种可能: "number"、 "string"、 "boolean"、 "object" 、"function" 和 "undefined"。
网友评论