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和C#中使用正则表达式匹配a标签
Nov 26 Javascript
jQuery动画与特效详解
Feb 01 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
Boostrap模态窗口的学习小结
Mar 28 Javascript
vue二级路由设置方法
Feb 09 Javascript
使用Vue组件实现一个简单弹窗效果
Apr 23 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
Mar 01 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
Mar 07 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
JavaScript 作用域scope简单汇总
Oct 23 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
Sep 04 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下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
让 python 命令行也可以自动补全
2014/11/30 Python
python开发游戏的前期准备
2019/05/05 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
网络方面基础面试题
2012/11/16 面试题
写给爸爸的道歉信
2014/01/15 职场文书
团日活动策划书
2014/02/01 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
股东授权委托书范本
2014/09/13 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
质量保证书
2015/01/17 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
股东协议书范本2016
2016/03/21 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android