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的放大镜效果
May 30 Javascript
js+csss实现的一个带复选框的下拉框
Sep 29 Javascript
纯javascript实现分页(两种方法)
Aug 26 Javascript
jQuery实用技巧必备(中)
Nov 03 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
Nov 18 Javascript
Bootstrap CSS组件之按钮下拉菜单
Dec 17 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 Javascript
javascript定时器取消定时器及优化方法
Jul 08 Javascript
基于node.js实现微信支付退款功能
Dec 19 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
使用Sonarqube扫描Javascript代码的示例
Dec 26 Javascript
详解小程序云开发数据库
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 变量未定义等错误的解决方法
2011/01/12 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
Python实现区域填充的示例代码
2021/02/03 Python
美国购车网站:TrueCar
2016/10/19 全球购物
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
C#面试常见问题
2013/02/25 面试题
思想品德自我评价
2014/02/04 职场文书
《在家里》教后反思
2014/03/01 职场文书
产品推广策划方案
2014/05/10 职场文书
商铺门前三包责任书
2014/07/25 职场文书
停车场管理协议书范本
2014/10/08 职场文书
故意杀人案辩护词
2015/05/21 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书