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利用初始化数据装配模版的实现代码
Nov 17 Javascript
网页运行时提示对象不支持abigimage属性或方法
Aug 10 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
JS原型、原型链深入理解
Feb 27 Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 Javascript
jQuery实现根据滚动条位置加载相应内容功能
Jul 18 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
Jul 26 Javascript
使用electron将vue-cli项目打包成exe的方法
Sep 29 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
Nov 24 Javascript
jquery css实现流程进度条
Mar 26 jQuery
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实现遍历文件夹的方法汇总
2017/03/02 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python装饰器使用方法实例
2013/11/21 Python
Python lambda和Python def区别分析
2014/11/30 Python
Python中字符串的修改及传参详解
2016/11/30 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
python的文件操作方法汇总
2017/11/10 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python日期时间Time模块实例详解
2019/04/15 Python
python函数与方法的区别总结
2019/06/23 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
python math模块的基本使用教程
2021/01/16 Python
医学院学生求职简历的自我评价
2013/10/24 职场文书
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
大四自我鉴定
2014/02/08 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
战马观后感
2015/06/08 职场文书
培根随笔读书笔记
2015/07/01 职场文书
市场营销计划书
2019/04/24 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL
利用Pycharm连接服务器的全过程记录
2021/07/01 Python