JavaScript判断对象是否为数组


Posted in Javascript onDecember 22, 2015

文中为大家分享了三种JavaScript判断对象是否为数组的方法,

1. typeof

首先我们会想到的是使用typeof来检测数据类型,但是对于Function, String, Number, Undefined等这几种基本类型来说,使用typeof来检测都可以检测到,比如代码如下:

function test(){}
console.log(typeof 1); // number
console.log(typeof test); // function 
console.log(typeof "yunxi"); // string
console.log(typeof undefined); // undefined

但是对于数组或者正则来说,使用typeof来检测的话,那就满足不了,因为当我们检测数组或者正则的话,那么返回的类型将会是一个对象object,如下代码所示:

console.log(typeof []); // object
console.log(typeof /\d+/g); // object

2. Instanceof

由此我们很容易会想到使用instanceof来检测某个对象是否是数组的实例,该检测会返回一个布尔型(boolean),如果是数组的话,返回true,否则的话返回false;我们再来看下上面的检测是否为数组的代码如下:

console.log([] instanceof Array); // true
console.log(/\d+/g instanceof Array); // false

如上可以看到使用instanceof确实可以判断是否为数组的列子;
3. constructor属性

在javascript中,每个对象都有一个constructor属性,它引用了初始化该对象的构造函数,比如判断未知对象的类型,因此我们可以如下写一个方法,代码如下:

function isArray(obj) {
  return typeof obj == 'object' && obj.constructor == Array
}
// 测试demo
console.log(isArray([])); // true
var a = {"a":1};
console.log(isArray(a)); // false

var b = [1,2,3];
console.log(isArray(b)); // true
console.log(isArray(/\d+/g));// false

如上可以看到,通过调用isArray 方法也可以判断是否为数组的列子。
我们现在可以看到,对于第二点和第三点分别使用instanceof方法和constructor属性貌似都可以来判断是否为数组了,但是也有列外情况,比如在跨框架iframe的时候使用页面中的数组时,会失败,因为在不同的框架iframe中,创建的数组是不会相互共享其prototype属性的;如下代码测试即可得到验证~

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;    
var arr = new xArray("1","2","3","4","5");
//这个写法IE下是不支持的,标准浏览器firefox,chrome下有

console.log(arr); // 打印出 ["1", "2", "3", "4", "5"]
console.log(arr instanceof Array); // false 
console.log(arr.constructor === Array); // false

如上的方法我们都不能来判断一个对象是否为数组的方式; 但是我们在看ECMA262中可以看到,可以使用 Object.prototype.toString.call()方法来判断一个对象是否为数组;如下代码:

function isArray(obj) {
  return Object.prototype.toString.call(obj) == '[object Array]';
}
// 代码调用
console.log(isArray([])); // true
console.log(isArray([1,2,3])); // true

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;    
var arr = new xArray("1","2","3","4","5");

console.log(arr); // ["1","2","3","4","5"]
console.log(isArray(arr)); // true

以上就是本文的全部内容,帮助大家学习JavaScript判断对象是否为数组的方法,希望对大家的学习有所帮助。

Javascript 相关文章推荐
jquery中实现简单的tabs插件功能的代码
Mar 02 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
JS实现的简洁二级导航菜单雏形效果
Oct 13 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 Javascript
easyui messager alert 三秒后自动关闭提示的实例
Nov 07 Javascript
微信小程序中实现一对多发消息详解及实例代码
Feb 14 Javascript
js评分组件使用详解
Jun 06 Javascript
vue父子组件的嵌套的示例代码
Sep 08 Javascript
基于vue-resource jsonp跨域问题的解决方法
Feb 03 Javascript
vue中实现Monaco Editor自定义提示功能
Jul 05 Javascript
vue组件内部引入外部js文件的方法
Jan 18 Javascript
javascript中类的定义方式详解(四种方式)
Dec 22 #Javascript
jquery获取select选中值的方法分析
Dec 22 #Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 #Javascript
点评js异步加载的4种方式
Dec 22 #Javascript
JS模拟按钮点击功能的方法
Dec 22 #Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 #Javascript
js实现仿微博滚动显示信息的效果
Dec 21 #Javascript
You might like
Zend Guard一些常见问题解答
2008/09/11 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
异步动态加载js与css文件的js代码
2013/09/15 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
ionic3 懒加载
2017/08/16 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
vue常用高阶函数及综合实例
2021/02/25 Vue.js
Python进行数据科学工作的简单入门教程
2015/04/01 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
python实现超级马里奥
2020/03/18 Python
python ssh 执行shell命令的示例
2020/09/29 Python
香港通票:Hong Kong Pass
2019/02/26 全球购物
毕业生求职推荐信
2013/11/04 职场文书
大学生活学习的自我评价
2013/12/03 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
孔庙导游词
2015/02/04 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
Flask搭建一个API服务器的步骤
2021/05/28 Python