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 相关文章推荐
使用正则替换变量
May 05 Javascript
30个最好的jQuery 灯箱插件分享
Apr 25 Javascript
Jquery中对数组的操作代码
Aug 12 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
Jan 08 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
Mar 06 Javascript
自定义事件解决重复请求BUG的问题
Jul 11 Javascript
详解Node全局变量global模块
Sep 28 Javascript
Node.js使用Koa搭建 基础项目
Jan 08 Javascript
Vue.js实现备忘录功能
Jun 26 Javascript
Vue 实现分页与输入框关键字筛选功能
Jan 02 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
Sep 11 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/07/01 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
食品安全处置方案
2014/06/14 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
户籍证明模板
2014/09/28 职场文书
营销计划书
2015/01/17 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers