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实现cookie的写入、读取、删除功能
Nov 05 Javascript
js实现简单的计算器功能
Jan 16 Javascript
js弹出窗口简单实现代码
Mar 22 Javascript
vue 2.0组件与v-model详解
Mar 27 Javascript
详解微信小程序中的页面代码中的模板的封装
Oct 12 Javascript
vue-cli配置环境变量的方法
Jul 09 Javascript
highCharts提示框中显示当前时间的方法
Jan 18 Javascript
详解jQuery-each()方法
Mar 13 jQuery
优雅地使用loading(推荐)
Apr 20 Javascript
微信小程序实现消息框弹出动画
Apr 18 Javascript
ckeditor一键排版功能实现方法分析
Feb 06 Javascript
vue 路由守卫(导航守卫)及其具体使用
Feb 25 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间隔一段时间执行代码的方法
2014/12/02 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
js 创建书签小工具之理论
2011/02/25 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
Python变量和数据类型详解
2017/02/15 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
Python3爬楼梯算法示例
2019/03/04 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
关于python中导入文件到list的问题
2020/10/31 Python
化学教师自荐信范文
2013/12/28 职场文书
活动总结的格式
2014/05/07 职场文书
安全生产标语大全
2014/10/06 职场文书
新学期开学标语2015
2015/07/16 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server