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 相关文章推荐
ImageZoom 图片放大镜效果(多功能扩展篇)
Apr 14 Javascript
js的逻辑运算符 ||
May 31 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
Mar 16 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
Apr 16 Javascript
JQuery实现动态添加删除评论的方法
May 18 Javascript
纯javascript响应式树形菜单效果
Nov 10 Javascript
详解js私有作用域中创建特权方法
Jan 25 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
Feb 27 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
Mar 05 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
Mar 19 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
Nov 06 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
Dec 17 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP4中实现动态代理
2006/10/09 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
javascript的BOM汇总
2015/07/16 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
python实现定制交互式命令行的方法
2014/07/03 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
python3中int(整型)的使用教程
2017/03/23 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
Keras搭建自编码器操作
2020/07/03 Python
python如何代码集体右移
2020/07/20 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
台湾森森购物网:U-mall
2017/10/16 全球购物
Why we need EJB
2016/10/20 面试题
电子商务个人职业生涯规划范文
2014/02/12 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
离婚协议书范文
2015/01/26 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js