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 相关文章推荐
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
Mar 31 Javascript
原生js 秒表实现代码
Jul 24 Javascript
jquery选择checked在ie8普通模式下的问题
Feb 12 Javascript
jQuery截取指定长度字符串的实现原理及代码
Jul 01 Javascript
javascript正则表达式之search()用法实例
Jan 19 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
Aug 05 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
Jan 10 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
Sep 18 Javascript
Electron 如何调用本地模块的方法
Feb 01 Javascript
Nuxt使用Vuex的方法示例
Sep 06 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 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操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
html超链接打开窗口大小的方法
2013/03/05 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
Javascript的this用法
2017/01/16 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
Python里隐藏的“禅”
2014/06/16 Python
python判断字符串是否纯数字的方法
2014/11/19 Python
python遍历类中所有成员的方法
2015/03/18 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
测绘工程本科生求职信
2013/10/10 职场文书
金融专业个人求职信范文
2013/11/28 职场文书
校园安全检查制度
2014/02/03 职场文书
中学校庆方案
2014/03/17 职场文书
大学生自我鉴定书
2014/03/24 职场文书
职务任命书范本
2014/06/05 职场文书
股份合作协议书
2014/09/10 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书