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 相关文章推荐
JS 时间显示效果代码
Aug 23 Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
js实现文字在按钮上滚动的方法
Aug 20 Javascript
基于jquery实现三级下拉菜单
May 10 Javascript
H5移动端适配 Flexible方案
Oct 24 Javascript
jQuery双向列表选择器select版
Nov 01 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
Apr 27 jQuery
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
Apr 25 Javascript
Vue使用Three.js加载glTF模型的方法详解
Jun 14 Javascript
vue页面跳转实现页面缓存操作
Jul 22 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
js实现网页随机验证码
2020/10/19 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
个人自荐信
2013/12/05 职场文书
优良学风班申请材料
2014/02/13 职场文书
合伙经营协议书范本
2014/04/18 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
软环境建设心得体会
2014/09/09 职场文书
小升初自荐信范文
2015/03/05 职场文书
可怜妈妈观后感
2015/06/09 职场文书
python 远程执行命令的详细代码
2022/02/15 Python
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL