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 相关文章推荐
xtree.js 代码
Mar 13 Javascript
js中的屏蔽的使用示例
Jul 30 Javascript
js跨域访问示例(客户端/服务端)
May 19 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
javascript判断网页是关闭还是刷新
Sep 12 Javascript
vue2组件之select2调用的示例代码
Oct 12 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
Oct 20 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
如何将你的AngularJS1.x应用迁移至React的方法
Feb 01 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
微信小程序 checkbox使用实例解析
Sep 09 Javascript
vue项目中极验验证的使用代码示例
Dec 03 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
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
jQuery的三种$()
2009/12/30 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
softmax及python实现过程解析
2019/09/30 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
python3将变量输入的简单实例
2020/08/19 Python
python中类与对象之间的关系详解
2020/12/16 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
新东网科技Java笔试题
2012/07/13 面试题
科室工作个人总结的自我评价
2013/10/29 职场文书
总经理办公室主任岗位职责
2013/11/12 职场文书
审计主管岗位职责
2014/01/31 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
小学数学教研活动总结
2014/07/01 职场文书
小学六年级毕业感言
2015/07/30 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
python实现Nao机器人的单目测距
2021/09/04 Python
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers