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 选择器 xpath 语法应用
May 13 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
浅析jQuery中常用的元素查找方法总结
Jul 04 Javascript
JS显示下拉列表框内全部元素的方法
Mar 31 Javascript
jQuery遍历DOM元素与节点方法详解
Apr 14 Javascript
拖动时防止选中
Feb 03 Javascript
vue数据双向绑定原理解析(get & set)
Mar 08 Javascript
微信小程序中的onLoad详解及简单实例
Apr 05 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
Apr 22 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
Jun 01 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
Aug 14 Javascript
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
php 购物车实例(申精)
2009/05/11 PHP
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
jquery插件之easing使用
2010/08/19 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
Python使用numpy模块创建数组操作示例
2018/06/20 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
python RSA加密的示例
2020/12/09 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
中专生自我鉴定范文
2013/12/19 职场文书
暑期培训随笔感言
2014/03/10 职场文书
促销活动总结报告
2014/04/26 职场文书
广播节目策划方案
2014/05/23 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
MongoDB支持的索引类型
2022/04/11 MongoDB