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 Ajax 全解析
Feb 08 Javascript
jQuery+ajax实现顶一下,踩一下效果
Jul 17 Javascript
用jquery与css打造个性化的单选框和复选框
Oct 20 Javascript
js arguments,jcallee caller用法总结
Nov 30 Javascript
JQuery判断HTML元素是否存在的两种解决方法
Dec 26 Javascript
有关JavaScript中call()和apply() 的一些理解
May 20 Javascript
jQuery实现的浮动层div浏览器居中显示效果
Feb 03 Javascript
微信小程序 开发经验整理
Feb 15 Javascript
Angular2数据绑定详解
Apr 18 Javascript
用vue构建多页面应用的示例代码
Sep 20 Javascript
Vue中的混入的使用(vue mixins)
Jun 01 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 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
php获取当前时间的毫秒数的方法
2014/01/26 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
canvas绘制多边形
2017/02/24 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
webpack项目轻松混用css module的方法
2018/06/12 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
在Python中调用ggplot的三种方法
2015/04/08 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
解析Python中while true的使用
2015/10/13 Python
简单实现python爬虫功能
2015/12/31 Python
Unicode和Python的中文处理
2017/03/19 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
python 字符串和整数的转换方法
2018/06/25 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
运动会领导邀请函
2014/02/05 职场文书
开工仪式策划方案
2014/05/23 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
冰雪公主观后感
2015/06/16 职场文书