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

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

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

  缺点:非常不实用,当对象的属性存在length,且其值为number(比如类数组),则该方法失效,不建议使用,看看即可。

*方二:通过instanceof来判断区分

  

        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

  

     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

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

  原理参考:http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html

  

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

方五:随便找一个数组仅有的方法,来判断数组和对象谁有该方法即可(样例以sort来举例)

  

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

  

  总结:方法应用权重:

    优先使用方四toString,因为该方法几乎无缺陷。

    次之可以使用方二instanceof和方三constructor

    剩下的方法玩玩即可,不实用

  

时间: 2024-08-27 15:22:15

判断一个变量类型是数组还是对象的相关文章

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

因为无论是对象还是数组,对于typeof操作返回的都是object,那么怎么去区分他们呢? 1.通过length属性:一般情况下对象没有length属性值,其值为undefiend,而数组的length值为number类型 缺点:非常不实用,当对象的属性存在length,且其值为number(比如类数组),则该方法失效,不建议使用,看看即可. 2.通过instanceof来判断区分 var arr = [1, 2, 3]; var obj = { name: 'lyl', age: 18, 1:

判断一个变量是否为数组

(1) var array = new Array("1", "2", "3", "4", "5"); console.log(array instanceof Array);//true (2) var array = new Array("1", "2", "3", "4", "5"); console.

js如何判断一个变量是否是数组?

//方法一 var arr = [1,2,3]; var obj = {'name': 'xiaoming','age': 19}; if(arr.constructor == Array){ alert(1); } //方法二 if(Array.isArray(arr)){ alert(1); } //方法三 var getDataType = function(o){ if(typeof o == 'object'){ if(typeof o.length == 'number'){ ret

判断一个变量是数组类型的方法

在很多时候,我们都需要对一个变量进行数组类型的判断(借鉴) 学过js就应该知道typeof运算符返回字符串,该字符串代表操作数的类型(即返回数据类型)这是最常用的. 下面多种实现方式: JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Array的对象就不起作用了. alert(typeof null); // "object" alert(ty

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

typeof都返回object 在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object 1 2 3 4 5 6 var o = { 'name':'lee' }; var a = ['reg','blue']; document.write( ' o typeof is ' + typeof o); document.write( ' <br />'); document.wri

JavaScript 判断一个变量是不是数组

如何判断一个变量是不是数组是一个很基础的问题. 1. 可以简单的使用instanceof来判断 [] instanceof Array 这种用法的缺陷是在iframe里面定义的Array 实例不能适用.例如在子iframe里面定义的变量 a = []; 如果判断: document.getElementsByTagName('iframe')[0].contentWindow.a instanceof Array 会返回false, 另外的以下的结果为true.可见iframe里面的window

判断一个变量是否是某种基本类型.

public static void Judge(object ma) { var ta = ma.GetType(); //通过Type可以对传入的参数类型进行基本类型的判断 Console.WriteLine(ta.IsEnum); //枚举 Console.WriteLine(ta.IsValueType); //值类型 Console.WriteLine(ta.IsInterface); //接口 Console.WriteLine(ta.IsClass); //引用类型 Console

js中判断一个变量是否为数字类型的疑问

1.typeof(a)=="number" 是true,但是a instanceof Number却为false,不理解 2.isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN)值为true,isNaN(Number("xyz"))值为true,isNaN("abc")值为true,isNaN(123

Javascript如何判断一个变量是数字类型?

isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN)值为true,isNaN(Number("xyz"))值为true,isNaN("abc")值为true,isNaN(123/0)值为false,所以它实际是将不能转换成number类型的其他类型及其自身NaN都判断为true,而除了其自身NaN外所有的number类型