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的抓取博客园首页RSS的代码
Dec 01 Javascript
Extjs优化(二)Form表单提交通用实现
Apr 15 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
Jan 02 Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
Jul 29 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
Sep 16 Javascript
jQuery获取DOM节点实例分析(2种方式)
Dec 15 Javascript
基于javascript实现图片滑动效果
May 07 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 Javascript
基于vue2.0动态组件及render详解
Mar 17 Javascript
Vue.js如何使用Socket.IO的示例代码
Sep 05 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
火车头采集器3.0采集图文教程
2007/03/17 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
python实现批量下载新浪博客的方法
2015/06/15 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
python装饰器练习题及答案
2019/11/01 Python
python 并发下载器实现方法示例
2019/11/22 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
小车司机岗位职责
2013/11/25 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
作风年建设汇报材料
2014/08/14 职场文书
安全例会汇报材料
2014/08/23 职场文书
群众路线个人剖析材料
2014/10/07 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python
python装饰器代码解析
2022/03/23 Python
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers