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 相关文章推荐
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
什么是cookie?js手动创建和存储cookie
May 27 Javascript
jquery.validate提示错误信息位置方法
Jan 22 Javascript
使用jquery提交form表单并自定义action的实现代码
May 25 Javascript
JS添加删除DIV的简单实例
Jul 08 Javascript
快速掌握jQuery插件WebUploader文件上传
Nov 07 Javascript
JS解决position:sticky的兼容性问题的方法
Oct 17 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 Javascript
vue全局自定义指令-元素拖拽的实现代码
Apr 14 Javascript
Vue.js中该如何自己维护路由跳转记录
May 19 Javascript
javascript的this关键字详解
May 20 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获取服务器端mac和客户端mac的地址支持WIN/LINUX
2014/05/15 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
vue实现通讯录功能
2018/07/14 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
Python实现命令行通讯录实例教程
2016/08/18 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
为什么相对PHP黑python的更少
2020/06/21 Python
python如何建立全零数组
2020/07/19 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
中学生运动会口号
2014/06/07 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
高中军训感想
2015/08/07 职场文书
市场营销计划书
2019/04/24 职场文书
Java使用jmeter进行压力测试
2021/07/09 Java/Android