• 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。

  • 相关阅读:
    Codeforces Round #538 (Div. 2) F. Please, another Queries on Array?
    2021 ICPC济南 J Determinant
    牛客小白月赛43 F 全体集合
    The 2021 ICPC Asia Regionals Online Contest (II) L Euler Function
    C++文件操作详解
    利用VC实现图像的特殊显示效果 小楼machine
    Mixed mode assembly is built against version 'v2.0.50727' 解决方案 小楼machine
    如何在对话框资源从一个项目导入到另一个项目使用 Visual c + +.net 或 Visual c + + 2005 小楼machine
    灰度图像阈值化分割常见方法总结及VC实现 小楼machine
    Visual C++多媒体设计及图形、图像处理 小楼machine
  • 原文地址:https://www.cnblogs.com/xiao-xue/p/7473560.html
Copyright © 2020-2023  润新知