javascript怎么判断一个变量是数组

之前strong去见了大神回来问我,怎么判断一个变量是数组,至少要用三种方法。

参见一篇来自前端大全的文章
参考链接在这里

isArray()

照理说这个方法是最简便的方法。

if(Array.isArray(value)){}

但是这个方法在IE9以下的浏览器并不支持

typeof()

数组是特殊的对象,所以数组的typeof结果是object。然而,null的typeof结果也是object。所以要用typeof的话就得写成

var a = [1,2,3];
//是object且要排除null和纯对象
console.log(
(typeof a === 'object' && a !== null &&               Object.prototype.toString.call(a) !== '[object Object]')); //true

instanceof()

对于一个网页或者一个全局作用域而言。这个方法是有效的

if(a instanceof Array){//...}

但是如果这个页面嵌套了frame暂且叫做a.html。
这个frame里定义了window.a= [1,3,5];

那么

window.onload = function(){
    var a = window.frames[0].a;
    console.log(a instanceof Array); //false
    console.log(a.constructor === Array); //false
}

这是因为每个 frame 都有一套自己的执行环境,跨 frame 实例化的对象彼此不共享原型链。如果打印 a instanceof window.frames[0].Array,那么结果就是 true 了。

特性嗅探

var b = [3,4,5];
if(b.sort){//.....}

这样一旦某个对象正好有值为sort的key的话,就会有问题。
比如:

var b = {sort:'aaa'};

这样的话b.sort也是true,所以也不能用。

最靠谱的方法应该是

Object.prototype.toString.call(value)

这个方法的原理是:
每个对象有一个叫做class的内部属性,再配合 call,我们可以取得任何对象的内部属性 [[Class]],然后把类型检测转化为字符串输出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,446评论 0 4
  • Javascript有很多数组的方法,有的人有W3C的API,还可以去MDN上去找,但是我觉得API上说的不全,M...
    顽皮的雪狐七七阅读 9,689评论 0 6
  • 第三章 基本概念 3.1 语法 ECMAScript标识符一般采用驼峰大小写格式,也就是第一个字母小写,剩下的每个...
    小雄子阅读 3,658评论 0 1
  • 不要轻易放弃一个每天都会想念的人。这样的人,一辈子也不会遇到几个。即便在一起要吃很多苦头,咬咬牙也就过去了。生活的...
    绾心阅读 4,951评论 7 7
  • 问答 1.ajax 是什么?有什么作用? AJAX = Asynchronous JavaScript and X...
    鸿鹄飞天阅读 1,703评论 0 0