1.typeof X
大家都是object......
2.object.prototype.toString.call
A.什么是prototype以及__proto__
首先假设通过构造函数Person可以new一个对象PGY,而该Person有prototype属性,那么PGY也可以访问所有prototype属性。prototype指向函数的原型对象,这是一个显式原型属性,只有函数才拥有该属性。而__proto__是隐式原型。
function Person(){ //构造函数
this.sex="男"
}
Person.prototype={ //该构造函数的prototype属性
stature:192
}
let PGY=new Person(); //new一个对象
console.log(PGY.__proto__); //使用__proto__访问
console.log(Person.prototype);
console.log(PGY.stature); //直接调用该属性
B.Object.prototype.toString.call
这句话的意思是让我们用Object原型上的toString方法作用在传入的obj的上下文中(通过call将this指向obj),所有类在继承Object的时候,改写了toString()方法。 Object原型上的方法是可以输出数据类型的。因此我们想判断数据类型时,也只能使用原始方法。继而有了此方法:Object.prototype.toString.call(obj)
详见这篇:
3.instanceof与constructor
使用instanceof进行判断,A instanceof B即对象A是不是构造函数B构造出来的,是即返回true, 不是即返回false.
弊端:忽略iframe
均为false