JavaScript判断变量是对象还是数组的方法

 更新时间:2014年08月28日 09:04:22   投稿:junjie  
这篇文章主要介绍了JavaScript判断变量是对象还是数组的方法,本文分别使用instanceof和typeof实现,需要的朋友可以参考下

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。

相关文章

  • js日期时间补零的小例子

    js日期时间补零的小例子

    js日期时间补零的小例子,需要的朋友可以参考一下
    2013-03-03
  • 微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例

    微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例

    这篇文章主要介绍了微信小程序使用wx.request请求服务器json数据并渲染到页面操作,结合实例形式分析了微信小程序使用wx.request发送网络请求及返回结果渲染到wxml界面相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • webpack4 css打包压缩问题的解决

    webpack4 css打包压缩问题的解决

    本篇文章主要介绍了webpack4 css打包压缩问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • javascript关于继承的用法汇总

    javascript关于继承的用法汇总

    这篇文章主要介绍了javascript关于继承的用法,实例汇总了常见的javascript关于继承的用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • Javascript事件热键兼容ie|firefox

    Javascript事件热键兼容ie|firefox

    Javascript热键兼容ie,firefox,需要的朋友可以参考下。
    2010-12-12
  • JavaScript检查数据中是否存在相同的元素(两种方法)

    JavaScript检查数据中是否存在相同的元素(两种方法)

    这篇文章主要介绍了JavaScript检查数据中是否存在相同的元素(两种方法),需要的朋友可以参考下
    2018-10-10
  • arcgis for js 修改infowindow样式的方法

    arcgis for js 修改infowindow样式的方法

    下面小编就为大家带来一篇arcgis for js 修改infowindow样式的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 分享十八个杀手级JavaScript单行代码

    分享十八个杀手级JavaScript单行代码

    这篇文章主要给大家分享了十八个杀手级JavaScript单行代码,这些单行代码可以帮助你提高工作效率并可以帮助调试代码,对大家学习或者使用JavaScript具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • js如何实现元素曝光上报

    js如何实现元素曝光上报

    这篇文章主要介绍了js如何实现元素曝光上报,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • js实现购物网站放大镜功能

    js实现购物网站放大镜功能

    这篇文章主要为大家详细介绍了js实现购物网站放大镜功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论