Javascript中判断变量是数组还是对象(array还是object)


Posted in Javascript onAugust 14, 2013

怎样判断一个JavaScript变量是array还是obiect?
答案:
1、如果你只是用typeof来检查该变量,不论是array还是object,都将返回‘objec'。
此问题的一个可行的答案是是检查该变量是不是object,并且检查该变量是否有数字长度(当为空array时长度也可能为0)。
然而,参数对象【arguments object】(传给制定函数的所有参数),也可能会适用于上述方法,技术上来说,参数对象并不是一个array。
此外,当一个对象有a.length属性的时候,这个方法也不成立。

// Real array 正在的数组 
var my_array = []; 
// Imposter! 冒名顶替的! 
var my_object = {}; 
my_object.length = 0; 
// Potentially faulty 潜在的错误 
function is_this_an_array(param) { 
if (typeof param === 'object' && !isNaN(param.length)) { 
console.log('Congrats, you have an array!'); 
} 
else { 
console.log('Bummer, not an array'); 
} 
} 
// Works 成功 
is_this_an_array(my_array); 
// Works, but is incorrect 成功了,但是不正确 
is_this_an_array(my_object);

2、回答这个问题的另一个答案是用一个更加隐蔽的方法,调用toString( )方法试着将该变量转化为代表其类型的string。
该方法对于真正的array可行;参数对象转化为string时返回[object Arguments]会转化失败;此外,
对于含有数字长度属性的object类也会转化失败。
// Real array 真正的数组 
var my_array = []; 
// Imposter! 冒名顶替的! 
var my_object = {}; 
my_object.length = 0; 
// Rock solid 坚如磐石(检验函数) 
function is_this_an_array(param) { 
if (Object.prototype.toString.call(param) === '[object Array]') { 
console.log('Congrats, you have an array!'); 
} 
else { 
console.log('Bummer, not an array'); 
} 
} 
// Works 成功了 
is_this_an_array(my_array); 
// Not an array, yay! 不是数组(array)! 
is_this_an_array(my_object);

3、此外,在可能不可靠的多框架DOM环境中,instanceof是个完美合适的操作。
扩展阅读:"Instanceof Considered Harmful…"
http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray
var my_array = []; 
if (my_array instanceof Array) { 
console.log('Congrats, you have an array!'); 
}

4、对于Javascript 1.8.5(ECMAScript 5),变量名字.isArray( )可以实现这个目的
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/isArray
var my_array = []; 
if (Array.isArray(my_array)) { 
console.log('Congrats, you have an array!'); 
}
Javascript 相关文章推荐
jquery+javascript编写国籍控件
Feb 12 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
Mar 01 Javascript
jQuery处理json数据返回数组和输出的方法
Mar 11 Javascript
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
Dec 20 Javascript
vue中将html字符串转换成html后遇到的问题小结
Dec 10 Javascript
koa router 多文件引入的方法示例
May 22 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
Oct 28 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
Jul 16 Javascript
一篇文章带你从零快速上手Rollup
Sep 07 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
Aug 14 #Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
Aug 14 #Javascript
js中return false(阻止)的用法
Aug 14 #Javascript
JavaScript中window、doucment、body的解释
Aug 14 #Javascript
onmouseover和onmouseout的一些问题思考
Aug 14 #Javascript
js之onload事件的一点使用心得
Aug 14 #Javascript
jQuery Animation实现CSS3动画示例介绍
Aug 14 #Javascript
You might like
C# Assembly类访问程序集信息
2009/06/13 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
jQuery 解析xml文件
2009/08/09 Javascript
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
一篇不错的Python入门教程
2007/02/08 Python
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
简单了解python数组的基本操作
2019/11/26 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
篮球比赛拉拉队口号
2014/06/10 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
复试通知单模板
2015/04/24 职场文书
中学政教处工作总结
2015/08/13 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
python pyhs2 的安装操作
2021/04/07 Python
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS