引用数据类型,也叫作复杂数据类型,可能不同的开发者,理解不同就有不同的叫法。
引用数据类型主要作用是区分基本数据类型,描述的是具有属性和函数的对象。
应用数据类型包含了Object、Array、Date、RegExp类型、Math类型、Function类型,以及基本数据类型的包装类型,如Number()、String()。
引用数据类型的几个特点:
Object有实例函数和静态函数。实例函数是函数的调用是基于Object类型的实例,比如:const obj = new Object();
const obj = {};
Object.defineProperties(obj,{
name:{
value:"oiuy"
}
});
判断一个变量是数组还是对象,如果用typeof来判断的话,得到的是object,因为typeof运算符只有在判断基本数据类型的时候,才能返回准确的结果。所以我们只能使用以下这几个方法来判断引用数据类型
// 判断变量是数组还是对象
function isArrayOrObject(obj) {
const constructor = obj.__proto__.constructor || obj.constructor;
if (constructor === Array) {
return "Array"
}
if (constructor === Object) {
return "Object";
}
return "该变量不是object类型"
}
console.log(isArrayOrObject([])); // Array
console.log(isArrayOrObject({})); // Object
const param = 468;
console.log(isArrayOrObject(param)); // 该变量不是object类型
console.log(Object.prototype.toString.call([1]))// [object Array]
console.log(Object.prototype.toString.call(124))//[object Number]
console.log(Object.prototype.toString.call({ name: '24' })); // [object Object]
console.log(Object.prototype.toString.call("")) //[object String]
上面封装的函数,是通过变量的.__proto__属性来判断的,但是有些浏览器已经支持__proto__了,可以改用toString:
// 判断变量是数组还是对象
function isArrayOrObject(obj) {
const res = Object.prototype.toString.call(obj)
if (res === '[object Array]') {
return "Array"
}
if (res === '[object Object]') {
return "Object";
}
return "该变量不是object类型"
}