typeof
操作符返回一个字符串,表示未经计算的操作数的类型
- typeof 对于基本类型,除了 null 都可以显示正确的类型。
- typeof 对于对象,除了函数都会显示 object
- 除 Function 外的所有构造函数的类型都是 'object'
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 "object"
instanceof
是判断变量是否为某个对象的实例,返回值为true或false
instanceof (A,B) = {
var L = A.__proto__;
var R = B.prototype;
if(L === R) {
//A的内部属性__proto__指向B的原型对象
return true;
}
return false;
}
继承情况
function Parent(){};
function Child(){};
function Other(){};
Child.prototype = new Parent();
let child = new Child();
child instanceof Child; // true
child instanceof Parent; // true
child instanceof Object; // true
child instanceof Other; // false
// 原因
Parent.prototype.__proto__ === Object.prototype
Object.prototype.toString.call
每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中 type 是对象的类型
其他类型将 toString 方法重写,所以返回其他值,当时使用 Object.prototype.toString.call 时其他类型会返回对应的 [object type]