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 相关文章推荐
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
Feb 07 Javascript
学习JavaScript设计模式之中介者模式
Jan 14 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
Dec 23 Javascript
JavaScript中三种常见的排序方法
Feb 24 Javascript
详解Chart.js轻量级图表库的使用经验
May 22 Javascript
Node.js log4js日志管理详解
Jul 31 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
详解JavaScript的数据类型以及数据类型的转换
Apr 20 Javascript
express + jwt + postMan验证实现持久化登录
Jun 05 Javascript
新手入门带你学习JavaScript引擎运行原理
Jun 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
php 全文搜索和替换的实现代码
2008/07/29 PHP
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
浅析JS运动
2015/12/28 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
Python 抓取动态网页内容方案详解
2014/12/25 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
python os模块简单应用示例
2019/05/23 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
scrapy头部修改的方法详解
2020/12/06 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
中国网上药店领导者:1药网
2017/02/16 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
2014的自我评价
2014/01/13 职场文书
社区健康教育实施方案
2014/03/18 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers