返回顶部
首页 > 资讯 > 前端开发 > node.js >前端中Typeof和Instanceof的原理和用法
  • 804
分享到

前端中Typeof和Instanceof的原理和用法

2024-04-02 19:04:59 804人浏览 泡泡鱼
摘要

本篇内容主要讲解“前端中Typeof和Instanceof的原理和用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“前端中Typeof和Instanceof的原

本篇内容主要讲解“前端中Typeof和Instanceof的原理和用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“前端中Typeof和Instanceof的原理和用法”吧!

1.1 typeof

1.1.1 基础介绍

typeof是一个运算符,其有两种使用方式:(1)typeof(表达式);(2)typeof  变量名;返回值是一个字符串,用来说明变量的数据类型;所以可以用此来判断number, string, object, boolean, function,  undefined, symbol 这七种类型,每种情况返回的内容如下表所示:

类型结果
String'string'
Number'number'
Boolean'boolean'
Undefined'undefined'
Object'object'
function函数'function'
Symbol'symbol'

1.1.2 原理进阶

typeof方法虽然很好用,但该方法有一定的局限性:对于对象、数组、null 返回的值是  object。比如typeof(window),typeof(document),typeof(null)返回的值都是object,这是为什么呢?这就要从底层说起。js在底层存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息:

  1. 000:对象;

  2. 010:浮点数;

  3. 100:字符串;

  4. 110:布尔值;

  5. 1:整数;

  6. 特例:

(1)null所有机器码均为0

(2)undefined:用 ?2^30 整数来表示

typeof就是通过机器码判断类型,由于null的所有机器码均为0,该机器码和对象一样,因此直接被当作对象来看待,所以通过typeof就不能够判断区分对象还有null了。

1.1.3 实验

说了这么多,还没有进行验证,下面就逐一验证一下:

// 字符串 console.log(typeof('lili')); // string // 数字 console.log(typeof(1)); // number // 布尔值 console.log(typeof(true)); // boolean // undefined console.log(typeof(undefined)); // undefined // 对象 console.log(typeof({})); // object // 数组 console.log(typeof([])); // object // null console.log(typeof(null)); // object // 函数 console.log(typeof(() => {})); // function // Symbol值 console.log(typeof(Symbol())); // symbol

1.2 instanceof

1.2.1 基础介绍

instanceof运算符用于检测构造函数的  prototype属性是否出现在某个实例对象的原型链上,返回值为布尔值,用于指示一个变量是否属于某个对象的实例。其语法如下所示:

object instanceof constructor

1.2.2 原理进阶

instanceof 主要的实现原理就是只要右边变量的 prototype 在左边变量的原型链上即可。因此,instanceof  在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false.步骤如下所示:

  1. 获取左边变量的隐式原型(即:__ proto __ ,可通过Object.getPrototypeOf()获取);

  2. 获取右边变量的显示原型(即:prototype);

  3. 进行判断,比较leftVal. __ proto __ . __ proto __ …… ===  rightVal.prototype,相等则返回true,否则返回false。

1.2.3 实验

上面讲述了instanceof的简单使用和其原理,下面简单使用一下并验证一下该原理:

const arr = [1, 2]; // 判断Object的prototype有没有在数组的原型链上 console.log(arr instanceof Object); // true // 数组arr的原型 const proto1 = Object.getPrototypeOf(arr); console.log(proto1); // [] // 数组arr的原型的原型 const proto2 = Object.getPrototypeOf(proto1); console.log(proto2); // [] // Object的prototype console.log(Object.prototype); // 判断arr的原型是否与Object的prototype相等 console.log(proto1 === Object.prototype); // false // 判断arr的原型的原型是否与Object的prototype相等 console.log(proto2 === Object.prototype); // true

到此,相信大家对“前端中Typeof和Instanceof的原理和用法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 前端中Typeof和Instanceof的原理和用法

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

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

猜你喜欢
  • 前端中Typeof和Instanceof的原理和用法
    本篇内容主要讲解“前端中Typeof和Instanceof的原理和用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“前端中Typeof和Instanceof的原...
    99+
    2024-04-02
  • JS前端instanceof的实现原理是什么
    这篇文章主要介绍了JS前端instanceof的实现原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS前端instanceof的实现原理是什么文章都会有所收获,下面我们一起来看看吧。instanceo...
    99+
    2023-07-04
  • JavaScript中typeof 和 instanceof 运算符的区别是什么
    这篇文章将为大家详细讲解有关JavaScript中typeof 和 instanceof 运算符的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1...
    99+
    2024-04-02
  • 前端JavaScript中的反射和代理
    目录1、什么是反射2、JavaScript中Reflect2.1 Reflect.get(target, name, receiver)2.2 Reflect.set(target,...
    99+
    2024-04-02
  • JavaScript中isPrototypeOf、instanceof和hasOwnProperty函数的用法详解
    isPrototypeOf 作用:检测一个对象是否是另一个对象的原型。或者说一个对象是否被包含在另一个对象的原型链中 var p = {x:1};//定义一个原型对象 var o =...
    99+
    2024-04-02
  • 怎么理解js中的typeof用法
    本篇内容介绍了“怎么理解js中的typeof用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基础typeof 运算符是 javascrip...
    99+
    2023-06-25
  • 如何理解JavaScript原型链和instanceof运算符的关系
    如何理解JavaScript原型链和instanceof运算符的暧昧关系,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。时间回到两个月前,简单地理了理原型链、prototype以...
    99+
    2023-06-17
  • 前端异常502 bad gateway的原因和解决办法
    目录502 bad gateway报错形成1.什么是502 bad gateway 报错2.产生502错误的原因第一个原因:DNS 缓冲第二个原因:浏览器代理第三个原因:dns 被劫...
    99+
    2024-04-02
  • 前端和后端开发在项目中的作用和协作
    在现代软件开发中,前端和后端开发起着至关重要的作用,并且二者之间的协作也至关重要。前端开发主要负责用户在浏览器中看到的界面和交互体验,而后端开发则负责处理数据、逻辑和与数据库的交互。两...
    99+
    2024-04-02
  • JS前端使用迭代器和生成器原理是什么
    这篇文章主要介绍了JS前端使用迭代器和生成器原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS前端使用迭代器和生成器原理是什么文章都会有所收获,下面我们一起来看看吧。正文生成器和迭代器这两个东西平时作...
    99+
    2023-07-05
  • PHP在前端和后端中的作用是什么
    这篇文章主要介绍了PHP在前端和后端中的作用是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP在前端和后端中的作用是什么文章都会有所收获,下面我们一起来看看吧。PHP在后端的作用在后端开发中,PHP可以...
    99+
    2023-07-05
  • C#中TransactionScope的使用方法和原理
    在C#中,TransactionScope用于创建一个事务范围,能够确保一系列数据库操作要么全部成功提交,要么全部回滚。Transa...
    99+
    2023-09-01
    C#
  • Java中ThreadLocal的用法和原理详解
    目录用法实现原理内存泄漏用法 隔离各个线程间的数据避免线程内每个方法都进行传参,线程内的所有方法都可以直接获取到ThreadLocal中管理的对象。 package com.exam...
    99+
    2023-05-15
    Java ThreadLocal用法 Java ThreadLocal原理 Java ThreadLocal
  • web中大前端和小前端的区别是什么
    小编给大家分享一下web中大前端和小前端的区别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • vue3中 provide 和 inject 用法及原理
    前言: 在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或...
    99+
    2024-04-02
  • 探讨一下PHP在前端和后端中的作用
    PHP是一种服务器端脚本语言,用于开发互联网应用程序。许多人认为PHP是后端技术,因为它专门用于在服务器上运行的代码。但是,实际上,PHP还可以用于前端网页开发中。本文将探讨PHP在前端和后端中的角色,以及它在这两个方面的优势和劣势。PHP...
    99+
    2023-05-14
    php
  • vue中前端路由的原理是什么
    vue中前端路由的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一. 前端路由现代前端开发中最流行的页面模型,莫过于...
    99+
    2024-04-02
  • Java中ThreadLocal的用法和原理是什么
    这篇文章主要介绍“Java中ThreadLocal的用法和原理是什么”,在日常操作中,相信很多人在Java中ThreadLocal的用法和原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中Th...
    99+
    2023-07-06
  • React的核心原理和用法
    本篇内容介绍了“React的核心原理和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1. ...
    99+
    2024-04-02
  • Nodejs和Session的原理及用法
    这篇文章主要介绍“Nodejs和Session的原理及用法”,在日常操作中,相信很多人在Nodejs和Session的原理及用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作