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 相关文章推荐
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
Aug 14 Javascript
jquery子元素过滤选择器使用示例
Jun 24 Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
jquery序列化方法实例分析
Jun 10 Javascript
js中json处理总结之JSON.parse
Oct 14 Javascript
基于layui数据表格以及传数据的方式
Aug 19 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
Oct 08 Javascript
ionic3双击返回退出应用的方法
Sep 17 Javascript
js实现贪吃蛇游戏 canvas绘制地图
Sep 09 Javascript
js获取图片的base64编码并压缩
Dec 05 Javascript
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
react antd实现动态增减表单
Jun 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
获取URL文件名后缀
2013/10/24 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
javascript hasFocus使用实例
2010/06/29 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
面试题:react和vue的区别分析
2019/04/08 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
python代码xml转txt实例
2020/03/10 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
家庭教育先进个人事迹材料
2014/01/24 职场文书
人力资源职位说明书
2014/07/29 职场文书
2014年女职工工作总结
2014/11/27 职场文书
认识实习感想
2015/08/10 职场文书
2016党校培训心得体会
2016/01/07 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL