- 首先应该明确一些基本常识也就是typeof是一个一元运算符,其调用的时候可以加括号或者不加括号的。其可以判断一些基本数据类型,同时也会将任意的引用数据类型都返回为Object,其只能很粗略的知道当前的是否为一个对象。
- instanceof方法:其是可以判断对应的构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。是会在整个对象原型链上去找。
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);
console.log(auto instanceof Car);
console.log(auto instanceof Object);
- 还有就是使用初始化的实例中的对象拥有着一个指向原型链的指针,对应的创建的构造函数的原型链上有属性constructor的取值,可以直接访问这个取值来返回对应的构造函数的。但是这种方式不是很安全,因为 constructor 属性可以被改写。这里额外说一下判断数组的另外的一个方法就是使用:Array.isArray(value);
var arr123 = [1, 2, 3];
console.log(arr123.constructor);
console.log(Array.isArray(arr123));
- 因为每个类都有一个[[Class]]属性,我们可以使用原型链上的这个方式来完成其的访问,便可以得到对应的详细的取值,这个方法也是目前最好的方法。Object.prototype.toString() ,使用方式如下:调用的方式要注意!
var arr123 = [1, 2, 3];
console.log(Object.prototype.toString.call(arr123));
console.log(Array.prototype.toString.call(arr123));
function num() {
return 1;
}
console.log(Object.prototype.toString.call(num));