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 相关文章推荐
用javascript实现分割提取页面所需内容
May 09 Javascript
js表格分页实现代码
Sep 18 Javascript
JQuery之focus函数使用介绍
Aug 20 Javascript
jquery实现可拖拽弹出层特效
Jan 04 Javascript
javascript实现字符串反转的方法
Feb 05 Javascript
jQuery实现复选框批量选择与反选的方法
Jun 17 Javascript
微信小程序自定义组件
Aug 16 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
Sep 10 jQuery
手淘flexible.js框架使用和源代码讲解小结
Oct 15 Javascript
vue+mock.js实现前后端分离
Jul 24 Javascript
JavaScript Tab菜单实现过程解析
May 13 Javascript
Vue如何基于es6导入外部js文件
May 15 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实现邮件群发的源码
2013/06/18 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
php支付宝APP支付功能
2020/07/29 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
浅析vue-router原理
2018/10/19 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
Python中偏函数用法示例
2018/06/07 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
使用html5制作loading图的示例
2014/04/14 HTML / CSS
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
学生会竞选演讲稿
2014/04/24 职场文书
关于安全的广播稿
2014/10/23 职场文书
公司承诺函范文
2015/01/21 职场文书
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
Python Pygame实战之塔防游戏的实现
2022/03/17 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python