instanceof

instanceof

作用

检测构造器函数prototype 是否位于某个对象的 __proto__ 原型链上。

原理

function instance_of(V, F) {
  var O = F.prototype;
  V = V.__proto__;
  while (true) {
    if (V === null)
      return false;
    if (O === V)
      return true;
    V = V.__proto__;
  }
}

为什么下列 instanceof 返回 false

console.log(true instanceof Boolean);              // false
console.log(0 instanceof Number);                  // false
console.log("" instanceof String);                 // false
console.log(new Boolean(true) instanceof Boolean); // true
console.log(new Number(0) instanceof Number);      // true
console.log(new String("") instanceof String);     // true

参考 ECMAScript 的标准:

If type(o) is not object, return false.

因为在 JavaScript 的世界中,一切皆是对象 (除了 boolean、number、string、null、undefined、symbol、bigint 这几个原始类型)。所以这意味着 true0""undefined 等这些是非对象

参考