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 new fun的执行过程
Aug 05 Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
jquery ready(fn)事件使用介绍
Aug 21 Javascript
javascript正则表达式总结
Feb 29 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
Aug 31 Javascript
AngularJS+Bootstrap实现多文件上传与管理
Nov 08 Javascript
Vue.js组件tab实现选项卡切换
Mar 23 Javascript
微信小程序中form 表单提交和取值实例详解
Apr 20 Javascript
Bootstrap模态框插入视频的实现代码
Jun 25 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
Nov 10 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
Nov 21 Javascript
JavaScript代码模拟鼠标自动点击事件示例
Aug 07 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/22 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
javascript StringBuilder类实现
2008/12/22 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Django的Modelforms用法简介
2019/07/27 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
表达自我的市场:Society6
2018/08/01 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
《会变的花树叶》教学反思
2014/02/10 职场文书
应届大学生自荐书
2014/06/17 职场文书
片区教研活动总结
2014/07/02 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
高三化学教学反思
2016/02/22 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书