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 textarea光标定位方法(兼容IE和FF)
Mar 12 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
Mar 16 Javascript
onclick和onblur冲突问题的快速解决方法
Apr 28 Javascript
js实现上传图片及时预览
May 07 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
Jan 10 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
Aug 31 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
Vue2 监听属性改变watch的实例代码
Aug 27 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
jQuery实现可以扩展的日历
Dec 01 jQuery
uni-app 微信小程序授权登录的实现步骤
Feb 18 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生成plist数据的方法
2015/06/16 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
XENON基于JSON变种
2010/07/27 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
django中的setting最佳配置小结
2017/11/21 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
Python如何调用外部系统命令
2019/08/07 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
查看keras的默认backend实现方式
2020/06/19 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
班级聚会策划书
2014/01/16 职场文书
一份创业计划书范文
2014/02/08 职场文书
老师的检讨书
2014/02/23 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
西柏坡导游词
2015/02/05 职场文书
春节慰问简报
2015/07/21 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
详解python字符串驻留技术
2021/05/21 Python
MySQL 如何限制一张表的记录数
2021/09/14 MySQL
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技