JavaScript 中的 instanceof 运算符

发布于 2022-08-18 12:28:32 字数 2502 浏览 224 评论 0

instanceof 运算符 测试给定对象是否是给定 JavaScript 类

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

const obj = new Rectangle(3, 5);
obj.height; // 3
obj.width; // 5

// The `instanceof` keyword is how you test whether an object was created
// from a certain class.
obj instanceof Rectangle; // true
({}) instanceof Rectangle; // false

从技术上讲, instanceof 运算符检查 原型链 以查看原型链中的任何构造函数是否等于给定类。 这意味着如果您使用 继承 ,则子类的实例也是基类的实例。

class BaseClass {}
class SubClass extends BaseClass {}

const obj = new SubClass();

obj instanceof SubClass; // true
obj instanceof BaseClass; // true

对象类

Object class 是所有 JavaScript 类的基类。

class MyClass {}

const obj = new MyClass();

obj instanceof Object; // true
({}) instanceof Object; // true
null instanceof Object; // false

您可能很想使用 v instanceof Object 检查是否 v 是一个对象。 这适用于大多数情况,但 在某些情况下对象不是 instanceof Object

// `Object.prototype` is not technically `instanceof Object` because
// prototype chains must end somewhere
typeof Object.prototype; // 'object'
Object.prototype instanceof Object; // false

// Setting a function's prototype to `Object.create(null)` means
// `Object` won't be in the object's prototype chain.
function MyClass() {}
MyClass.prototype = Object.create(null);

typeof new MyClass(); // 'object'
(new MyClass()) instanceof Object; // false

错误案例

instanceof 如果右侧不是函数,则运算符会引发错误。

class MyClass {}

function MyOtherClass() {}

const obj = {};

obj instanceof MyClass; // false
obj instanceof MyOtherClass; // false

// Throws "TypeError: Right-hand side of 'instanceof' is not callable"
obj instanceof { answer: 42 };

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

失而复得

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

1CH1MKgiKxn9p

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

JackDx

文章 0 评论 0

信远

文章 0 评论 0

yaoduoduo1995

文章 0 评论 0

霞映澄塘

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文