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的执行顺序 之jQuery.html深度分析
Mar 03 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
Feb 07 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
TypeOf这些知识点你了解吗
Feb 21 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
微信小程序 form组件详解及简单实例
Jan 10 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
Sep 13 Javascript
vue webpack打包后图片路径错误的完美解决方法
Dec 07 Javascript
Vue父子组件传值的一些坑
Sep 16 Javascript
理解JavaScript中的Proxy 与 Reflection API
Sep 21 Javascript
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
深入理解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下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
Python获取文件ssdeep值的方法
2014/10/05 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
八大排序算法的Python实现
2021/01/28 Python
pandas 将索引值相加的方法
2018/11/15 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
办公室文秘自我评价
2013/09/21 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL