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 相关文章推荐
textContent在Firefox下与innerText等效的属性
May 12 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
Jan 10 Javascript
使用focus方法让光标默认停留在INPUT框
Jul 29 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
Aug 24 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
Oct 09 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
最全面的JS倒计时代码
Sep 17 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
Jun 13 Javascript
vue组件父子间通信之综合练习(聊天室)
Nov 07 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
Mar 13 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
Apr 15 Javascript
javascript代码实现简易计算器
Jan 25 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制作静态网站的模板框架(四)
2006/10/09 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
收集的10个免费的jQuery相册
2011/02/26 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
python开发中module模块用法实例分析
2015/11/12 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
python中reload(module)的用法示例详解
2017/09/15 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
python实现感知机模型的示例
2020/09/30 Python
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
竞聘副主任科员演讲稿
2014/01/11 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis