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 相关文章推荐
js中的前绑定和后绑定详解
Aug 01 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
javascript中in运算符用法分析
Apr 28 Javascript
jQuery实现的背景动态变化导航菜单效果
Aug 24 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
Aug 29 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
Aug 14 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
Dec 24 Javascript
javascript原型链学习记录之继承实现方式分析
May 01 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 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
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
python正则分组的应用
2013/11/10 Python
python学习手册中的python多态示例代码
2014/01/21 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
10条PHP编程习惯
2014/05/26 面试题
进程的查看和调度分别使用什么命令
2013/12/14 面试题
餐饮采购员岗位职责
2014/03/15 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript