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 相关文章推荐
你需要知道的JavsScript可以做什么?
Jun 29 Javascript
js操作iframe父子窗体示例
May 22 Javascript
Js实现滚动变色的文字效果
Jun 16 Javascript
JavaScript中的getMilliseconds()方法使用详解
Jun 10 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
Jul 05 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
Angular的$http与$location
Dec 26 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
Vue项目webpack打包部署到服务器的实例详解
Jul 17 Javascript
vue.js实现插入数值与表达式的方法分析
Jul 06 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
PHP中for循环语句的几种变型
2007/03/16 PHP
一个图形显示IP的PHP程序代码
2007/10/19 PHP
php session处理的定制
2009/03/16 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Django 视图层(view)的使用
2018/11/09 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
浅析Python3 pip换源问题
2020/01/06 Python
python如何写出表白程序
2020/06/01 Python
实习教师自我鉴定
2013/12/09 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
网络销售员岗位职责
2015/04/11 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技