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 相关文章推荐
基于jquery的表格排序
Sep 11 Javascript
js中的cookie的读写操作示例详解
Apr 17 Javascript
深入理解javascript原型链和继承
Sep 23 Javascript
编写简单的jQuery提示插件
Dec 21 Javascript
javascript实现设置、获取和删除Cookie的方法
Jun 01 Javascript
JavaScript代码实现左右上下自动晃动自动移动
Apr 08 Javascript
深入剖析JavaScript:Object类型
May 10 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
May 16 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
Mar 07 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
ElementUI之Message功能拓展详解
Oct 18 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
Jul 29 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 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
php实现cookie加密的方法
2015/03/10 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
javascript函数库-集合框架
2007/04/27 Javascript
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
Linux下编译安装MySQL-Python教程
2015/02/02 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
护士自荐信范文
2013/12/15 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
淘宝客服工作职责
2014/07/11 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python