美文网首页我爱编程
判断一个变量类型是数组还是对象

判断一个变量类型是数组还是对象

作者: 易冷zzz | 来源:发表于2018-04-15 18:24 被阅读24次

    无论是数组还是对象,对于typeof的操作返回值都为object,所以就有了区分数组类型和对象类型的需要:

    方一:通过length属性:一般情况下对象没有length属性值,其值为undefiend,而数组的length值为number类型

    缺点:非常不实用,当对象的属性存在"length",且其值为Number类型,则该方法失效,不建议使用,看看即可。

     var arr = [1, 2, 3];
     var obj = {
                length: 3
            }
            console.log(arr.length); //3
           console.log(obj.length); //3
    

    *方二:通过instanceof来判断区分
    a instanceof Array 返回一个布尔值用于判断a是否为Array的一个实例

     var arr = [1, 2, 3];
     var obj = {
                name: 'lyl',
                age: 18,
                1: 'name'
            }
            console.log(arr instanceof Array); //true
           console.log(obj instanceof Array); //false
    

    *方三:通过constructor
    constructor 属性是Array对象的三个属性之一,另外2个是length和propotype.

    constructor 属性返回对创建此对象的数组函数的引用
    —— 来自W3C关于constructor介绍

         var arr = [1, 2, 3];
            var obj = {
                name: 'lyl',
                age: 18,
                1: 'name'
            }
            console.log(arr.constructor === Array); //true
            console.log(obj.constructor === Array); //false
    
    
    //关于constructor属性使用的扩展:
      var test=new Array();
      if (test.constructor==Array){
        document.write("This is an Array");
      }
      if (test.constructor==Boolean){
        document.write("This is a Boolean");
      }
      if (test.constructor==Date){
        document.write("This is a Date");
      }
      if (test.constructor==String){
        document.write("This is a String");
      }
    
    

    *方四:通过toString()方法,数组原型和对象原型定义的toString()方法不同

    原理参考:点击这里

    var arr = [1, 2, 3];
     var obj = {
            name: 'zqf',
            age: 18,
            1: 'name'
      }
    console.log(Object.prototype.toString.call(arr) === '[object Array]'); //true
    console.log(Object.prototype.toString.call(boj) === '[object Array]'); //false 
    

    以上,如果喜欢欢迎点赞和打赏,如有错误欢迎指正,谢谢!

    相关文章

      网友评论

        本文标题:判断一个变量类型是数组还是对象

        本文链接:https://www.haomeiwen.com/subject/hixjkftx.html