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 相关文章推荐
jquery zTree异步加载简单实例分享
Feb 05 Javascript
JS性能优化笔记搜索整理
Aug 21 Javascript
JS辨别访问浏览器判断是android还是ios系统
Aug 19 Javascript
JS验证逗号隔开可以是中文字母数字
Apr 22 Javascript
js判断登陆用户名及密码是否为空的简单实例
May 16 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
Nov 09 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
Dec 13 Javascript
JS数组排序方法实例分析
Dec 16 Javascript
微信小程序 本地图片按照屏幕尺寸处理
Aug 04 Javascript
vue 1.x 交互实现仿百度下拉列表示例
Oct 21 Javascript
vue cli 全面解析
Feb 28 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
Sep 28 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中定义网站根目录的常用方法
2010/08/08 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
根据配置文件加载js依赖模块
2014/12/29 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
jQuery.each使用详解
2015/07/07 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
Python基于DES算法加密解密实例
2015/06/03 Python
Python写入CSV文件的方法
2015/07/08 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
python字符串string的内置方法实例详解
2018/05/14 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
Python3中列表list合并的四种方法
2019/04/19 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
python+OpenCV实现图像拼接
2020/03/05 Python
Python中Selenium库使用教程详解
2020/07/23 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
详解Nginx 工作原理
2021/03/31 Servers
HTTP中的Content-type详解
2022/01/18 HTML / CSS