iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中typeof 和 instanceof 运算符的区别是什么
  • 642
分享到

JavaScript中typeof 和 instanceof 运算符的区别是什么

2024-04-02 19:04:59 642人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关javascript中typeof 和 instanceof 运算符的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1

这篇文章将为大家详细讲解有关javascript中typeof 和 instanceof 运算符的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1. typeof运算符

js 中,基本类型有 String、Number、Boolean和 Symbol  等。此外,还有函数、对象和特殊值undefined和null。

typeof是用于确定 expression 类型的运算符:

const typeAsString = typeof expression;

expression 的计算结果是我们要查找的类型的值。expression  可以是变量myVariable,属性访问器myObject.myProp,函数调用myFunction()或数字 14。

typeof expression,取决于expression的值,结果可能为:'string', 'number', 'boolean',  'symbol', 'undefined', 'object', 'function'。

我们来看看typeof运算符每种类型的情况:

A) String:

const message = 'hello!'; typeof message; // => 'string'

B) Number:

const number = 5; typeof number; // => 'number'  typeof NaN;    // => 'number'

C) Boolean:

const ok = true; typeof ok; // => 'boolean'

D) Symbol:

const symbol = Symbol('key'); typeof symbol; // => 'symbol'

E) undefined:

const nothing = undefined; typeof nothing; // => 'undefined'

F) Objects:

const object = { name: 'Batman' }; typeof object; // => 'object'  const array = [1, 4, 5]; typeof array; // => 'object'  const regExp = /Hi/; typeof regExp; // => 'object'

G) Functions:

function greet(who) {   return `Hello, ${who}!` }  typeof greet; // => 'function'

1.1 typeof null

如上我们看到的,用 typeof 判断对象结果是 'object'。

但是,typeof null也会计算为'object'!

const missinGobject = null; typeof missingObject; // => 'object'

typeof null为'object'是 JS 初始实现中的一个错误。

因此,在使用typeof检测对象时,需要另外检查null:

function isObject(object) {   return typeof object === 'object' && object !== null; }  isObject({ name: 'Batman' }); // => true isObject(15);                 // => false isObject(null);               // => false

1.2 typeof 和未定义的变量

虽然typeof expression通常决定于expression的类型,但也可以使用typeof来确定是否定义了变量。

// notDefinedVar is not defined notDefinedVar; // throws ReferenceError

typeof有一个不错的属性,当typeof评估未定义变量的类型时,不会引发 ReferenceError 错误:

// notDefinedVar is not defined typeof notDefinedVar; // => 'undefined'

变量notDefinedVar没有在当前作用域内定义。然而,typeof notDefinedVar不会抛出引用错误,而是将结果计算为  'undefined'。

我们可以使用typeof来检测是否未定义变量,如果typeof myVar === 'undefined' 为 true, 则 myVar  未定义。

2. instanceof 运算符

使用 JS 函数的通常方法是通过在其名称后添加一对括号来调用它:

function greet(who) {   return `Hello, ${who}!`; }  greet('World'); // => 'Hello, World!'

greet('World')是常规函数调用。

JS 函数可以做更多的事情:它们甚至可以构造对象!要使函数构造对象,只需在常规函数调用之前使用new关键字:

function Greeter(who) {   this.message = `Hello, ${who}!`; }  const worldGreeter = new Greeter('World'); worldGreeter.message; // => 'Hello, World!'

new Greeter('World')是创建实例worldGreeter的构造函数调用。

如何检查 JS 是否使用特定构造函数创建了特定实例?使用 instanceof 运算符:

const bool = object instanceof Constructor;

其中object是对对象求值的表达式,而Constructor是构造对象的类或函数,instanceof计算为布尔值。

worldGreeter实例是使用Greeter构造函数创建的,因此worldGreeter instanceof  Greeter计算结果为true。

es6 开始,可以使用 class 来定义对象。例如,定义一个类Pet,然后创建它的一个实例myPet:

class Pet {   constructor(name) {     this.name = name;   } }  const myPet = new Pet('Lily');

new Pet('Lily')是创建实例myPet的构造调用。

由于myPet是使用Pet类构造的-const myPet = new Pet('Lily'), 所以 myPet instanceof Pet 的结果为  true:

myPet instanceof Pet; // => true

但是,普通对象不是Pet的实例:

const plainPet = { name: 'Zoe' }; plainPet instanceof Pet; // => false

我们发现instanceof对于确定内置的特殊实例(如正则表达式数组)很有用:

function isRegExp(value) {   return value instanceof RegExp; } isRegExp(/Hello/); // => true isRegExp('Hello'); // => false  function isArray(value) {   return value instanceof Array; } isArray([1, 2, 3]); // => true isArray({ prop: 'Val' }); // => false

2.1 instanceof 和父类

现在,Cat 扩展了父类Pet:

class Cat extends Pet {   constructor(name, color) {     super(name);     this.color = color;   } }  const myCat = new Cat('Callie', 'red');

不出所料,myCat是Cat类的实例:

myCat instanceof Pet; // => true

但同时,myCat也是基类Pet的一个实例:

myCat instanceof Pet; // => true

关于JavaScript中typeof 和 instanceof 运算符的区别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: JavaScript中typeof 和 instanceof 运算符的区别是什么

本文链接: https://www.lsjlt.com/news/77839.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中typeof 和 instanceof 运算符的区别是什么
    这篇文章将为大家详细讲解有关JavaScript中typeof 和 instanceof 运算符的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1...
    99+
    2022-10-19
  • JavaScript中instanceof 运算符的作用是什么
    这篇文章给大家介绍JavaScript中instanceof 运算符的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。instanceof 运算符简介在 JavaScript ...
    99+
    2022-10-19
  • JavaScript展开运算符和剩余运算符的区别是什么
    这篇文章主要介绍“JavaScript展开运算符和剩余运算符的区别是什么”,在日常操作中,相信很多人在JavaScript展开运算符和剩余运算符的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Jav...
    99+
    2023-06-22
  • JavaScript中Object.is() 与 === 运算符的区别是什么
    JavaScript中Object.is() 与 === 运算符的区别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。简而...
    99+
    2022-10-19
  • java中instanceof运算符的作用是什么
    这篇文章将为大家详细讲解有关java中instanceof运算符的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java有哪些集合类Java中的集合主要分为四类:1、List列表:...
    99+
    2023-06-14
  • JavaScript展开运算符和剩余运算符有什么区别
    今天小编给大家分享一下JavaScript展开运算符和剩余运算符有什么区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收...
    99+
    2022-10-19
  • JavaScript展开运算符和剩余运算符的区别详解
    目录什么是剩余运算符?剩余运算符在JavaScript函数中是如何工作的?注意!不能在包含剩余参数的函数体中使用"use strict"剩余运算符在参数解构中是如...
    99+
    2022-11-12
  • = 和 := 赋值运算符有什么区别?
    实际上,它们都是赋值运算符,用于赋值,但它们之间的显着区别如下 -= 运算符赋值为SET 语句的一部分或作为 UPDATE 语句中 SET 子句的一部分,在任何其他情况下 = 运算符都被解释为比较运算符。另一方面,:= 运算符分配一个值,并...
    99+
    2023-10-22
  • JavaScript算数运算符、运算符和操作数是什么
    今天小编给大家分享一下JavaScript算数运算符、运算符和操作数是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收...
    99+
    2022-10-19
  • JavaScript中的运算符是什么样的
    这期内容当中小编将会给大家带来有关JavaScript中的运算符是什么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.运算符运算符(operator)也称操作符,是用于实现赋值、比较和执行算术运算等...
    99+
    2023-06-25
  • JavaScript运算符指的是什么
    这篇文章主要介绍了JavaScript运算符指的是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript运算符指的是什么文章都会有所收获,下面我们一起来看看吧。...
    99+
    2022-10-19
  • javascript中位运算符指的是什么
    本篇内容介绍了“javascript中位运算符指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • JavaScript中比较运算符是什么
    这篇文章主要为大家展示了“JavaScript中比较运算符是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中比较运算符是什么”这篇文章吧。JavaScript比较运算符有...
    99+
    2023-06-15
  • javascript的条件运算符是什么
    今天小编给大家分享一下javascript的条件运算符是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2022-10-19
  • 基于Python3中运算符 **和*的区别说明
    我们知道**代表次方。 如下 >>>12 * 12 144 >>>12 ** 2 144 >>>a=1e200 >...
    99+
    2022-11-12
  • JavaScript中运算符的优先级是什么
    这篇文章给大家分享的是有关JavaScript中运算符的优先级是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。运算符的优先级由高到低:() 优先级最高一元运算符 ++ – !...
    99+
    2022-10-19
  • MySQL ISNULL() 函数和 IS NULL 运算符有什么区别?
    显然,ISNULL()函数和IS NULL运算符没有任何区别,并且共享一些共同的行为。我们唯一能看到的区别是它们的语法。ISNULL()函数将表达式作为其参数,而IS NULL比较运算符将表达式放在其左侧。否则,如果表达式为NULL,则两者...
    99+
    2023-10-22
  • MySQL中的运算符是什么?
    以下是运算符在MySQL中的用法。 案例1 该运算符类似于 = 运算符,即当值相等时结果将为 true(1),否则为 false(0)。 在第一种情况下, = 和 运算符的工作原理相同。 案例2 每当我们将任何值与 NULL 进行比较时,...
    99+
    2023-10-22
  • javascript逻辑运算符的概念是什么
    这篇“javascript逻辑运算符的概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2022-10-19
  • 通配符*和?的区别是什么
    通配符*和在使用方法和匹配范围上有一些区别。具体区别:1、在匹配范围上,通配符*可以匹配任意长度的字符序列,包括字母、数字、标点符号和空格等,通配符只能匹配一个字符;2、在使用方法上,通配符*用于模糊匹配,可以匹配多个字符或字符序列,通配符...
    99+
    2023-08-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作