搜索
您的当前位置:首页正文

vue_如何判断变量是数组还是对象

来源:哗拓教育
vue_如何判断变量是数组还是对象

⼀、typeof判断数据类型(判断数组跟对象都返回object)

console.log(typeof null); // \"object\"console.log(typeof function () {return 1;

}); // \"function\"

console.log(typeof '梦龙⼩站'); // \"string\"console.log(typeof 1); // \"number\"console.log(typeof a); // \"undefined\"

console.log(typeof undefined); // \"undefined\"console.log(typeof []); // \"object\" console.log(typeof NaN); // \"number\" console.log(typeof {}); // \"object\"

⼆、instanceof判断对象的原型链是否是指向构造函数的prototype

  var arr = [1,2,3,1];

  console.log(arr instanceof Array)//true

三、对象的constructor属性

  var arr = [1,2,3,1];

  console.log(arr.constructor === Array)//true

四、Object.prototype.toString.call(arr)

  利⽤对象的toString可以准确判断是什么类型,call()改变this指向,这⾥是借⽤Object的⽅法,然后有⼈可能会问为什么不直接⽤arr.toString⽽要借⽤Object的⽅法,  我们看下⾯  

console.log(Object.prototype.toString.call(\"jerry\"));//[object String]console.log(Object.prototype.toString.call(12));//[object Number]console.log(Object.prototype.toString.call(true));//[object Boolean]

console.log(Object.prototype.toString.call(undefined));//[object Undefined]console.log(Object.prototype.toString.call(null));//[object Null]

console.log(Object.prototype.toString.call({name: \"jerry\//[object Object]console.log(Object.prototype.toString.call(function(){}));//[object Function]console.log(Object.prototype.toString.call([]));//[object Array]

console.log(Object.prototype.toString.call(new Date));//[object Date]console.log(Object.prototype.toString.call(/\\d/));//[object RegExp]

console.log(Object.prototype.toString.call(new Person));//[object Object]

直接⽤toString

console.log(\"jerry\".toString());//jerryconsole.log((1).toString());//1console.log([1,2].toString());//1,2

console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)console.log(function(){}.toString());//function (){}console.log(null.toString());//error

console.log(undefined.toString());//error

  因为toString为Object原型上的⽅法,⽽Array、Function都是Object的实例,实例重新改写了原型上的toString⽅法,不同的对象调⽤toString⽅法,调⽤的是改写之后的⽅法

  (转成各种类型的字符串),⽽不会调⽤Object原型上的toString()⽅法,因此直接调⽤不能判断对象类型

var arr=[1,2,3];

console.log(Array.prototype.hasOwnProperty(\"toString\"));//trueconsole.log(arr.toString());//1,2,3

delete Array.prototype.toString;//delete操作符可以删除实例属性console.log(Array.prototype.hasOwnProperty(\"toString\"));//falseconsole.log(arr.toString());//\"[object Array]\"

  我们可以看到,删除实例上的toString⽅法后调⽤的是Object原型上的toString()⽅法,返回对象类型五、es6的⽅法——Array.isArray()  

Array.isArray([]) //true

六、看好多博客说⽤length判断,这个其实不准确

var obj={a:1}var arr = []

console.log(obj.length)//undefinedconsole.log(arr.length)//0obj.length = 1

console.log(obj.length)//1

对象可以直接添加length这个属性,就⽆法区分了

因篇幅问题不能全部显示,请点此查看更多更全内容

Top