zoukankan      html  css  js  c++  java
  • js判断一个变量是对象还是数组

    引用原网址  http://www.111cn.net/wy/js-ajax/49504.htm

    typeof都返回object

    在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object

     代码如下
    1 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);
    2 执行:
    3 o typeof is object
    a typeof is object  

    因此,我们只能放弃这种方法,要判断是数组or对象有两种方法

    第一,使用typeof加length属性
    数组有length属性,object没有,而typeof数组与对象都返回object,所以我们可以这么判断

     代码如下
    1 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可以判断一个变量是不是数组,如:

     代码如下
    1 var o = { 'name':'lee' };
    var a = ['reg','blue'];
     
    alert( a instanceof Array );  // true
    alert( o instanceof Array );  // false

    也可以判断是不是属于object

     代码如下
    1 var o = { 'name':'lee' };
    var a = ['reg','blue'];
     
    alert( a instanceof Object );  // true
    alert( o instanceof Object );  // true

    但数组也是属于object,所以以上两个都是true,因此我们要利用instanceof判断数据类型是对象还是数组时应该优先判断array,最后判断object

     代码如下
    1 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,比如:

     代码如下
    1 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。

  • 相关阅读:
    mysql事务隔离级别回顾
    单链表倒数第K个节点的查找和显示
    mysql 行转列,对列的分组求和,对行求和
    获取分组后统计数量最多的纪录;limit用法;sql执行顺序
    You can't specify target table 'e' for update in FROM clause
    mysql 行转列 (结果集以坐标显示)
    springmvc执行流程 源码分析
    jdk动态代理 案例
    项目日志log管理
    apache和tomcat的区别
  • 原文地址:https://www.cnblogs.com/xiao-xue/p/7473560.html
Copyright © 2011-2022 走看看