前端JavaScript篇之intanceof 操作符的实现原理及实现、为什么0.1+0.2 ! == 0.3,如何让其相等

目录

  • intanceof 操作符的实现原理及实现
  • 为什么0.1+0.2 ! == 0.3,如何让其相等


intanceof 操作符的实现原理及实现

instanceof 是一个用于检查对象是否属于特定类的 JavaScript 操作符。它返回一个布尔值,指示对象是否是特定类的实例或者原型链中是否存在该类。

其基本语法如下:

object instanceof constructor
  • object:要检查的对象实例。
  • constructor:用来检查对象是否为其实例的构造函数。

实现原理:

instanceof 操作符其实现原理是通过检查对象的原型链,看对象的原型链上是否存在指定类型的原型。

当你使用 object instanceof Type 时,JavaScript 引擎会沿着 object 的原型链向上查找,看是否能在原型链中找到 Type.prototype。如果找到,就返回 true;否则返回 false

实现:

function myInstanceof(obj, constructor) {let proto = obj.__proto__while (proto) {if (proto === constructor.prototype) {return true}proto = proto.__proto__}return false
}

在这个自定义的 myInstanceof 函数中,我们首先获取 obj 的原型,然后不断地沿着原型链往上查找,直到找到目标构造函数的原型或者到达原型链的末端。如果找到了目标构造函数的原型,就返回 true;否则返回 false

思路:

  1. 获取对象的原型 __proto__
  2. 循环遍历原型链,直到找到目标构造函数的原型或者到达原型链的末端。
  3. 如果找到目标构造函数的原型,返回 true;否则返回 false

参考效果案例:

class Car {}
let myCar = new Car()
console.log(myInstanceof(myCar, Car)) // 输出 true
console.log(myInstanceof(myCar, Object)) // 输出 true,因为所有对象的原型链最终都指向 Object.prototype
console.log(myInstanceof([], Array)) // 输出 true
console.log(myInstanceof([], Object)) // 输出 true
console.log(myInstanceof({}, Array)) // 输出 false

请添加图片描述

为什么0.1+0.2 ! == 0.3,如何让其相等

在计算机中,浮点数的表示并不总是精确的。这是因为计算机使用二进制来表示小数,而在二进制系统中,有些小数无法准确地表示,就像十进制中的 1/3 一样。

当你计算 0.1 + 0.2 时,虽然在十进制中结果是 0.3,但在计算机内部,这两个浮点数的精确表示会导致一个微小的舍入误差。这导致了在计算机内部表示的值与我们期望的值略有不同。

要让它们相等,可以采用以下方法:

  1. 四舍五入: 可以将结果四舍五入到特定的小数位数。这种方法在实际应用中很常见,但也可能导致精度丢失。
  2. 使用整数进行计算: 将小数转换成整数进行计算,最后再转换回小数。这样可以避免浮点数计算过程中的精度问题。

参考效果案例:

// 四舍五入
let result = (0.1 * 10 + 0.2 * 10) / 10
console.log(result) // 输出 0.3// 使用整数进行计算
let result2 = (1 + 2) / 10
console.log(result2) // 输出 0.3

请添加图片描述

思路:

  • 对于四舍五入的方法,我们可以通过放大倍数,进行整数运算,最后再缩小倍数得到结果。
  • 使用整数进行计算的方法,可以将小数转换成整数进行计算,最后再转换回小数。

这些方法可以帮助我们解决浮点数计算中的精度问题。

持续学习总结记录中,回顾一下上面的内容:
intanceof 操作符的实现原理及实现、为什么0.1+0.2 ! == 0.3,如何让其相等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见の算法

前言本文主要使用Java 什么,是快乐星球#¥%……什么是算法? 算法是一组完成任务的指令。任何代码片段都可视为算法,但我们主要介绍常见算法 一、引入——二分查找 二分查找是一种算法,其输入是一个有序的元素列表。如…

浏览器实用:禁止浏览器http自动转成https

前言 因为有些网站支持http和https两种协议访问,有些只支持一种协议访问。但根据动态域名安全策略(HSTS),只要该域名在浏览器中访问过一次https,那么浏览器将强制使http的请求变为https。 虽然这条浏览器的策略有利于提…

Flink入门教程

使用flink时需要提前准备好scala环境 一、创建maven项目 二、添加pom依赖 <properties><scala.version>2.11.12</scala.version></properties><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library<…

携程基于Jira Cloud的敏捷项目管理实践

好的工具可以满足团队在各个成长阶段的管理诉求 实践一&#xff1a;对齐目标/团队OKR/多团队协作战略项目 实践二&#xff1a;以产品为中心的协作框架 实践三&#xff1a;交付团队管理 实践四&#xff1a;和海外子公司对齐&#xff0c;协作

在linux、window环境搭建kafka环境

一、搭建环境前置准备 下载kafka的官网 http://kafka.apache.org/downloads根据自己的需求选择版本,安装包不区分linux和windows环境,这一个安装包均可部署。 源代码包含kafka的代码文件,使用scala编写的。 二、linux环境 1. 上传安装包 我下载的版本是kafka_2.12-3.6.1…

09.Elasticsearch应用(九)

Elasticsearch应用&#xff08;九&#xff09; 1.搜索结果处理包括什么 排序分页高亮返回指定字段 2.排序 介绍 Elasticsearch支持对搜索结果排序&#xff0c;默认是根据相关度算分来排序 支持排序的字段 keyword数值地理坐标日期类型 排序语法 GET /[索引名称]/_sear…

网络协议与攻击模拟_08DHCP协议

技术学习要了解某项技术能干什么&#xff1f;它的详细内容&#xff1f;发展走向&#xff1f; 一、DHCP协议 1、DHCP基本概念 dhcp动态主机配置协议&#xff0c;广泛应用于局域网内部 主要是为客户机提供TCP/IP 参数&#xff08;IP地址、子网掩码、网关、DNS等&#xff09;…

5G赋能智慧文旅:科技与文化的完美结合,打造无缝旅游体验,重塑旅游业的未来

一、5G技术&#xff1a;智慧文旅的强大引擎 5G技术的起源可以追溯到2010年&#xff0c;当时世界各国开始意识到4G技术已经达到了瓶颈&#xff0c;无法满足日益增长的移动通信需求。2013年&#xff0c;国际电信联盟&#xff08;ITU&#xff09;成立了5G技术研究组&#xff0c;开…

超融合系统疑难故障定位与解决实践 3 例(含信创技术栈)

当 IT 系统出现故障&#xff0c;问题定位往往是运维人员最头疼的环节。尤其是超融合系统&#xff0c;由于整体涉及的技术栈比较复杂&#xff0c;且有越来越多的用户基于信创环境进行部署&#xff0c;非常考验厂商和技术人员的专业能力&#xff1a;厂商研发和售后工程师不仅应能…

[pytorch入门] 6. 神经网络

基本介绍 torch.nn&#xff1a; Containers&#xff1a;基本骨架Convolution Layers&#xff1a; 卷积层Pooling layers&#xff1a;池化层Non-linear Activations (weighted sum, nonlinearity)&#xff1a;非线性激活Normalization Layers&#xff1a;正则化层 Container…

一文讲透Excel数据如何导入到Stata?

推荐采用《Stata统计分析从入门到精通》 杨维忠、张甜 清华大学出版社“1.2.6 导入其他格式的数据文件” 的解答。 在Stata主界面选择“文件|导入”命令&#xff08;如图所示&#xff09;&#xff0c;即可看到Stata支持的其他格式的数据文件类型&#xff0c;包括Excel电子表格…

【收藏】幻兽帕鲁创建服务器教程

创建幻兽帕鲁服务器1分钟部署教程&#xff0c;阿里云和腾讯云均推出幻兽帕鲁服务器服务器和部署教程&#xff0c;4核16G和4核32G配置可选&#xff0c;阿腾云atengyun.com分享1分钟自建幻兽帕鲁Palworld服务器教程&#xff1a; 幻兽帕鲁服务器创建教程 幻兽帕鲁服务器官方推荐…

如何在 Linux 上安装 Docker?最权威指南来了!

docker文档&#xff1a;https://docs.docker.com/engine/ 打开docker文档 这里需要注意&#xff0c;服务器上一般是没有界面的&#xff0c;我们只需要安装docker Engine。 卸载历史版本 这一步是可选的&#xff0c;如果之前安装过旧版本的Docker&#xff0c;可以使用如下命令…

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

手上 ROC-RK3399-PC Pro 使用蓝牙 WIFI 模组是 AP6256。 一、AP6256 模组介绍 AP6256是正基科技(AMPAK)推出的一款低成本、低功耗的双模模块,它集成了Wi-Fi和蓝牙功能。这款模块支持SDIO接口,具有以下特点: 1、型号:AP6256 2、接口:SDIO(Secure Digital Input/Outp…

图像旋转角度计算并旋转

#!/usr/bin/python3 # -*- coding: utf-8 -*- import cv2 import numpy as np import timedef Rotate(img, angle0.0,fill0):"""旋转:param img:待旋转图像:param angle: 旋转角度:param fill&#xff1a;填充方式&#xff0c;默认0黑色填充:return: img: 旋转后…

《幻兽帕鲁》32人专有服务器设置教程,亲测稳定

创建幻兽帕鲁服务器1分钟部署教程&#xff0c;阿里云和腾讯云均推出幻兽帕鲁服务器服务器和部署教程&#xff0c;4核16G和4核32G配置可选&#xff0c;阿腾云atengyun.com分享1分钟自建幻兽帕鲁Palworld服务器教程&#xff1a; 幻兽帕鲁服务器创建教程 幻兽帕鲁服务器官方推荐…

飞速(FS)400G产品全家福及其应用介绍

随着大型数据中心不断向更高性能、更大规模的架构演进&#xff0c;构建能够有效应对海量用户群体、智能设备激增及复杂应用负载所需的高容量网络连接已变得不可或缺。尤其是在超大规模云计算服务迅速普及的背景下&#xff0c;对具备超高带宽和微秒级低延迟特性的网络基础设施需…

灌区信息化系统的建设内容和应用

一、背景 随着科技的不断发展&#xff0c;信息化技术已经逐渐渗透到各个领域中&#xff0c;为我们的生活和工作带来了极大的便利。灌区作为农业发展的重要组成部分&#xff0c;其信息化系统的建设也日益受到重视。 二、政策 据水利部消息&#xff0c;水利部、国家发改委近日正…

Unity中URP下获取额外灯数量

文章目录 前言一、SimpleLit下额外灯数量的获取1、在 SimpleLit 下&#xff0c;先获取了额外灯的数量2、对其进行循环计算每一个额外灯3、GetAdditionalLightsCount在这里插入图片描述 二、GetAdditionalLightsCount实现了什么1、_AdditionalLightsCount.x2、unity_LightData.y…

使用python写一个比Windows系统自带浏览器更好用的计算器

【介绍】 比Windows系统自带的还好用的计算器&#xff0c;感兴趣的可以试用一下。 1.支持括号优先级运算和平方、立方计算&#xff1b; 2.支持计算历史记录功能&#xff1b; 3.支持界面缩放和拖动&#xff1b; 4.支持钉在界面&#xff08;界面最前置顶&#xff09;&#xff0c…