引用数据类型,是通过 new 操作符来生成的,然而 new 在执行的时候,会改变 this 的指向。
执行 new 的时候,首先是创建一个空对象,把空对象的__proto__属性指向构造函数的 prototype 属性,完成了将构造函数的 this 指向新建的这个空对象。
Object 类型中,有这样的几个实例函数:
Object 类型的静态函数:
###判断一个数组是否为空的方法
const str = [1,2];
console.log(str instanceof Array);// true
console.log(str instanceof Object);// true
这就导致我们不能精准判断一个变量的具体数据类型。
第二个方式使用 Array 的 isArray 方法,比如:console.log(Array.isArray(arr);
,变量是数组就返回 true,法则返回 false。
通过判断构造函数,判断变量的构造函数是 Array 类型,还是 Object 类型。因为一个对象是通过构造函数来生成的。代码如下:
const arr = [];
console.log(arr.constructor === Array)
每一个变量都会有一个__proto__属性,表示隐式原型,proto 属性指向了构造函数的原型。比如:console.log(arr.__proto__ === arr.constructor.prototype);//true
引用数据类型都是继承了 Object 类型,所以它们都含有了 toString 函数,不同数据累心的 toString 的返回值是不一样的,因此可以通过 toString 函数来判断一个变量是数组还是对象。结果返回的是“[object Array]”或者"[object Object]"。
比如:
const obj = {}
const arr = []
console.log(Object.prototype.toString.call(obj)); //[object Object]
console.log(Object.prototype.toString.call(arr)) // [object Array]
console.log(Object.prototype.toString.call(908)) // [object Number]
console.log(Object.prototype.toString.call("7sd")) // [object String]
这一篇就记录这些吧!