JavaScript instanceof 运算符

一、概述

JavaScript 的 instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

function Foo() {}
function Bar() {}

let foo = new Foo()

console.log(foo instanceof Foo) // true
console.log(foo instanceof Bar) // false

在上面的例子中,由于 foo 的原型链中出现了 Foo.prototype,因此 foo instanceof Foo 的结果是 true。

需要注意的是,instanceof 判断的是实例的原型链上是否出现过该构造函数的 prototype 属性,而不是判断实例本身是否为该构造函数。

二、使用

instanceof 运算符通常用于判断某个对象是否为某种类型。

function People(name, age) {
  this.name = name
  this.age = age
}

function Student(name, age, grade) {
  this.name = name
  this.age = age
  this.grade = grade
}

let john = new People('John', 20)
let mary = new Student('Mary', 18, '高中三年级')

console.log(john instanceof People) // true
console.log(mary instanceof Student) // true
console.log(mary instanceof People) // true

在上面的例子中,即使 Student 没有明确继承 People,但是由于 Student 的原型链中包含了 People.prototype,所以可以判断 mary instanceof People 为 true。

三、注意事项

在使用 instanceof 运算符时,需要注意以下几点:

1. instanceof 右侧必须是一个函数。

2. instanceof 运算符不能正确判断基本类型,因为基本类型不是对象。

console.log('hello' instanceof String) // false
console.log(123 instanceof Number) // false

3. instanceof 可能被修改,导致结果不是预期的。

function Foo() {}
function Bar() {}

Bar.prototype = new Foo()

let b = new Bar()

console.log(b instanceof Bar) // true
console.log(b instanceof Foo) // true

// 修改 Bar.prototype
Bar.prototype = {}

console.log(b instanceof Bar) // false
console.log(b instanceof Foo) // true,由于对象 b 的原型链没有发生改变

四、总结

JavaScript 的 instanceof 运算符是一种用于判断对象是否属于某个类型的工具。它的判断方式是检测对象的原型链中是否出现了某个构造函数的 prototype 属性。在使用过程中需要注意避免修改构造函数的 prototype,以及判断基本类型时的局限性。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/291821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-25 14:08
下一篇 2024-12-25 14:08

相关推荐

  • 条件运算符(?:)是什么意思?

    条件运算符(?:)是JavaScript中的一种特殊的运算符,也是许多编程语言中相似语法的一部分。它可以允许我们在一个简单、一行的语句中完成条件判断和赋值操作,非常方便。 1.语法…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Python中赋值运算符和相等运算符解析

    Python是一种高级编程语言,它通常被用于开发 Web 应用程序、人工智能、数据分析和科学计算。在Python中,赋值运算符和相等运算符是非常常见和基本的运算符,它们也是进行编程…

    编程 2025-04-28
  • Python中的算数运算符优先级问题

    本文将从多个方面详细阐述Python中算数运算符的优先级问题,并给出对应代码示例。算数运算符的优先级指的是在混合运算时,Python自动根据一定的优先级顺序决定哪一个运算符先进行。…

    编程 2025-04-28
  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28
  • JavaScript中使用new Date转换为YYYYMMDD格式

    在JavaScript中,我们通常会使用Date对象来表示日期和时间。当我们需要在网站上显示日期时,很多情况下需要将Date对象转换成YYYYMMDD格式的字符串。下面我们来详细了…

    编程 2025-04-27
  • Python比较运算符

    Python中的比较运算符有六个,分别是等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)。本篇文章将从以下几个方面详…

    编程 2025-04-27
  • Python逻辑运算符优先级

    本篇文章将从多个方面对Python逻辑运算符优先级进行详细阐述,包括优先级规则、优先级示例及代码实现等内容。 一、优先级规则 在Python中,逻辑运算符的优先级从高到低依次为“n…

    编程 2025-04-27
  • 异或Python:用异或运算符增强Python编程能力

    Python是一种高级编程语言,被广泛应用于Web开发、数据分析等领域。Python提供了丰富的数据类型和函数库,但在某些情况下,Python自带的运算符可能不够灵活,无法满足程序…

    编程 2025-04-27
  • JavaScript中修改style属性的方法和技巧

    一、基本概念和方法 style属性是JavaScript中一个非常重要的属性,它可以用来控制HTML元素的样式,包括颜色、大小、字体等等。这里介绍一些常用的方法: 1、通过Java…

    编程 2025-04-25

发表回复

登录后才能评论