JavaScript判断变量是对象还是数组的方法


Posted in Javascript onAugust 28, 2014

typeof都返回object

在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object

var o = { 'name':'lee' };

var a = ['reg','blue'];

 

document.write( ' o typeof is ' + typeof o);

document.write( ' <br />');

document.write( ' a typeof is ' + typeof a);

执行:
o typeof is object

a typeof is object

因此,我们只能放弃这种方法,要判断是数组or对象有两种方法

第一,使用typeof加length属性

数组有length属性,object没有,而typeof数组与对象都返回object,所以我们可以这么判断

var o = { 'name':'lee' };

var a = ['reg','blue'];

 

var getDataType = function(o){

    if(typeof o == 'object'){

        if( typeof o.length == 'number' ){

            return 'Array'; 

        }else{

            return 'Object';    

        }

    }else{

        return 'param is no object type';

    }

};

 

alert( getDataType(o) );    // Object

alert( getDataType(a) );    // Array

alert( getDataType(1) );    // param is no object type

alert( getDataType(true) ); // param is no object type

alert( getDataType('a') );  // param is no object type

第二,使用instanceof

使用instanceof可以判断一个变量是不是数组,如:

var o = { 'name':'lee' };

var a = ['reg','blue'];

 

alert( a instanceof Array );  // true

alert( o instanceof Array );  // false

也可以判断是不是属于object
var o = { 'name':'lee' };

var a = ['reg','blue'];

 

alert( a instanceof Object );  // true

alert( o instanceof Object );  // true

但数组也是属于object,所以以上两个都是true,因此我们要利用instanceof判断数据类型是对象还是数组时应该优先判断array,最后判断object
var o = { 'name':'lee' };

var a = ['reg','blue'];

 

var getDataType = function(o){

    if(o instanceof Array){

        return 'Array'

    }else if( o instanceof Object ){

        return 'Object';

    }else{

        return 'param is no object type';

    }

};

 

alert( getDataType(o) );    // Object

alert( getDataType(a) );    // Array

alert( getDataType(1) );    // param is no object type

alert( getDataType(true) ); // param is no object type

alert( getDataType('a') );  // param is no object type

如果你不优先判断Array,比如:
var o = { 'name':'lee' };

var a = ['reg','blue'];

 

var getDataType = function(o){

    if(o instanceof Object){

        return 'Object'

    }else if( o instanceof Array ){

        return 'Array';

    }else{

        return 'param is no object type';

    }

};

 

alert( getDataType(o) );    // Object

alert( getDataType(a) );    // Object

alert( getDataType(1) );    // param is no object type

alert( getDataType(true) ); // param is no object type

alert( getDataType('a') );  // param is no object type

那么数组也会被判断为object。
Javascript 相关文章推荐
用一段js程序来实现动画功能
Mar 06 Javascript
IE和Firefox下event事件杂谈
Dec 18 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
详解jQuery中的元素的属性和相关操作
Aug 14 Javascript
js电话号码验证方法
Sep 28 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
Oct 17 Javascript
基于jQuery实现选项卡效果
Jan 04 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 jQuery
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 Javascript
微信小程序开发之IOS和Android兼容的问题
Sep 26 Javascript
详解用Node.js写一个简单的命令行工具
Mar 01 Javascript
分享一个自己动手写的jQuery分页插件
Aug 28 #Javascript
jQuery标签替换函数replaceWith()的使用例子
Aug 28 #Javascript
jQuery焦点图切换简易插件制作过程全纪录
Aug 27 #Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
Aug 27 #Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
Aug 27 #Javascript
JavaScript实现的in_array函数
Aug 27 #Javascript
JavaScript AJAX之惰性载入函数
Aug 27 #Javascript
You might like
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
56.com视频采集接口程序(PHP)
2007/09/22 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
python生成IP段的方法
2015/07/07 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
深入浅析Python的类
2018/06/22 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Django如何实现防止XSS攻击
2020/10/13 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
美国排名第一的葡萄酒俱乐部:Firstleaf Wine Club
2020/01/02 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
幼儿园数学教学反思
2014/02/02 职场文书
违反交通法规检讨书
2014/09/10 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
教师个人学习总结
2015/02/11 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL