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 相关文章推荐
理解 JavaScript 预解析
Oct 25 Javascript
Javascript 自适应高度的Tab选项卡
Apr 05 Javascript
javascript中简单的进制转换代码实例
Oct 26 Javascript
jquery iframe操作详细解析
Nov 20 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
Jan 06 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
类似于QQ的右滑删除效果的实现方法
Oct 16 Javascript
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
jQuery完成表单验证的实例代码(纯代码)
Sep 30 jQuery
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
详解SPA中前端路由基本原理与实现方式
Sep 12 Javascript
微信小程序实现的日期午别医生排班表功能示例
Jan 09 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获取文件内容最后一行示例
2014/01/09 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
浅谈Python单向链表的实现
2015/12/24 Python
Python获取当前路径实现代码
2017/05/08 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
简单了解django文件下载方式
2020/02/10 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
Python是什么 Python的用处
2020/05/26 Python
python+requests接口自动化框架的实现
2020/08/31 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
大学生专业个人学习的自我评价
2013/10/26 职场文书
上班睡觉检讨书
2014/01/09 职场文书
借名购房协议书范本
2014/10/06 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
MySQL优化及索引解析
2022/03/17 MySQL
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏