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 相关文章推荐
JScript 脚本实现文件下载 一般用于下载木马
Oct 29 Javascript
jquery如何把数组变为字符串传到服务端并处理
Apr 30 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
Mar 25 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
Feb 14 Javascript
详解Vue2 SSR 缓存 Api 数据
Nov 20 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
JS面向对象的程序设计相关知识小结
May 26 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
May 14 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 Javascript
JS实现网页端猜数字小游戏
Mar 06 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提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php中opendir函数用法实例
2014/11/15 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
护士实习生自我鉴定范文
2013/12/10 职场文书
好军嫂事迹材料
2014/01/15 职场文书
电视节目策划方案
2014/05/16 职场文书
个人工作表现评价材料
2014/09/21 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
关于远足的感想
2015/08/10 职场文书
检举信的写法
2019/04/10 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
Python如何将list中的string转换为int
2022/07/15 Ruby