javascript 判断一个对象为数组的方法


Posted in Javascript onMay 03, 2017

javascript 判断一个对象为数组的方法

数组对象

js的数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型。数组的元素可以是对象或其他数组,这样就可以创建复杂的数据结构。

通常我们可以用一元运算符typeof来判断js的数据类型,但是对于数组这样一个特殊的对象却只能返回"object"

typeof [1,2,3]
"object"
typeof 100
"number"
typeof false
"boolean"
typeof undefined
"undefined"
typeof NaN
"number"
typeof function(){}
"function"
typeof null
"object"

判断数组的方法

instanceof

instanceof 是一个二元运算符,左边操作数是一个对象,不是的话返回false,右边操作数是一个函数对象或者函数构造器,不是的话返回false。原理是通过判断左操作数的对象的原型链上是否具有右操作数的构造函数的prototype属性。

[1,2] instanceof Array 
true

Array.isArray(arr)

这个ES5新增的一个Array方法,该方法是Array对象的一个静态函数,用来判断一个对象是不是数组。

Array.isArray([1,2])
true

如果页面里面有n个frame,就存在多个window,每个window都有自己的Array对象,比如确定子window里的某个数组是不是Array时,用instanceof这个方法就不行了

var fr=window.frames[0];
fr.onload=function(){
  console.log(fr.arr instanceof Array);//false
  console.log(Array.isArray(fr.arr));//true
  //arr是另外一个页面的一个数组
}

Object.prototype.toString.call(arr) === “[object Array]”

Object.prototype.toString.call([1,2])
"[object Array]"

arr.constructor.name==='Array'

[1,2].constructor.name==='Array';
true

但是对象的constructor属性可以被改写,改写后用改方法判断就不行了

var arr=[1,2];
arr.constructor={};
arr.constructor.name === "Array" //undefined
false

其他方法 可以通过数组的一些独有的方法判断该对象是不是数组,比如join,push等

var c=[1,2];
c.push('3');//3
console.log(c)
[1, 2, "3"]

var c="12";
c.push('3');
//Uncaught TypeError: c.push is not a function(…)


var c=[1,2];
c.join('');
"12"

var c='12';
c.join('');
//Uncaught TypeError: c.join is not a function(…)

总结

通过上面的几种判断对象为数组对象的方法分析,使用Array.isArray(arr)和Oblect.prototype.toString.call(arr)是比较好的方法。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
限制复选框的最大可选数
Jul 01 Javascript
页面使用密码保护代码
Apr 10 Javascript
bootstrap布局中input输入框右侧图标点击功能
May 16 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
Aug 23 Javascript
浅谈js键盘事件全面控制
Dec 01 Javascript
详解Node项目部署到云服务器上
Jul 12 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
Koa代理Http请求的示例代码
Oct 10 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
Oct 18 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
Oct 02 Javascript
element中Steps步骤条和Tabs标签页关联的解决
Dec 08 Javascript
深入理解node.js之path模块
May 03 #Javascript
判断颜色是否合法的正则表达式(详解)
May 03 #Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 #Javascript
ES6中参数的默认值语法介绍
May 03 #Javascript
Express之get,pos请求参数的获取
May 02 #Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
May 02 #Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
May 02 #Javascript
You might like
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
javascript常用的方法整理
2015/08/20 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
vue实现简单的登录弹出框
2020/10/26 Javascript
Python break语句详解
2014/03/11 Python
python中的函数用法入门教程
2014/09/02 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
python 获取网页编码方式实现代码
2017/03/11 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
详解python深浅拷贝区别
2019/06/24 Python
基于python实现从尾到头打印链表
2019/11/02 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
shallow copy和deep copy的区别
2016/05/09 面试题
机关财务管理制度
2014/01/17 职场文书
八年级生物教学反思
2014/01/22 职场文书
爱我中华教学反思
2014/04/28 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
新教师个人总结
2015/02/06 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书