vue判断数据是对象_vue_如何判断变量是数组还是对象

本文介绍了在Vue中判断数据是对象还是数组的多种方式,包括使用typeof、instanceof、对象的constructor属性、Object.prototype.toString.call方法以及ES6的Array.isArray()。需要注意的是,直接使用toString方法可能因不同对象重写该方法导致判断不准确,而length属性对于对象来说并非可靠的判断依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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(arrinstanceof 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());//jerry

console.log((1).toString());//1

console.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"));//true

console.log(arr.toString());//1,2,3

delete Array.prototype.toString;//delete操作符可以删除实例属性

console.log(Array.prototype.hasOwnProperty("toString"));//false

console.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)//undefined

console.log(arr.length)//0

obj.length= 1console.log(obj.length)//1

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值