判断一个变量类型是数组还是对象
2016-09-25 11:31
585 查看
因为无论是数组还是对象,对于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
剩下的方法玩玩即可,不实用
相关文章推荐
- 判断一个变量类型是数组还是对象
- 判断一个变量类型是数组还是对象
- 判断一个变量是数组还是对象
- Javascript如何判断一个变量是普通变量还是数组还是对象?
- JavaScript判断一个变量是对象还是数组
- 如何判断一个变量是数组Array类型
- JavaScript判断变量是对象还是数组的方法
- 如何判断变量是数组还是对象
- JavaScript中如何判断变量是数组、函数或是对象类型
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- 使用构造函数来判断一个对象是数组还是日期
- 怎么判断一个对象是不是数组类型?
- 如何判断一个变量是数组Array类型
- 判断一个变量是数组Array类型的方法
- 判断一个对象是不是JavaScript数组(怎样判断一个变量是数组)
- JUQERY判断变量是数组还是对象
- JavaScript判断变量是对象还是数组的方法
- 1.在使用new创建数组后,此时数组还是一个引用数组。 只有再创建新的对象,并把对象赋值给数组引用,到此初始化结束2.什么是引用类型?
- 判断一个变量是数组Array类型的方法
- python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的