首页 > 其他分享 >Object — Object.is()

Object — Object.is()

时间:2024-02-22 15:56:02浏览次数:18  
标签:false log Object let console true

Object.is() 方法通常用于需要进行严格相等比较的场景,特别是在处理一些特殊值时更为实用。以下是一些适合使用 Object.is() 的场景:

 1 // (1)比较字符串
 2 let str = '1'
 3 let str1 = '1'
 4 
 5 console.log(Object.is(str,str1)) //true
 6 console.log(Object.is('str','str')) //true
 7 console.log(Object.is('1',str))//true
 8 console.log(Object.is('str','str1'))//false
 9 
10 // (2)比较数组
11 let arr = []
12 let arr1 = [1,2]
13 let arr2 = [1,2]
14 console.log(Object.is(arr,arr1)) //false
15 console.log(Object.is(arr1,arr2)) //false
//Object.is() 用于比较两个值是否严格相等,它并不支持比较数组。如果使用 Object.is() 方法比较两个数组,结果始终是 false
16 17 // (3)比较特殊对象undifined 和null 18 Object.is(null, null); //true 19 Object.is(undefined,undefined); //true 20 Object.is(undefined,null); //false 21 22 23 // (4)比较对象 24 let object = { 25 a :'1', 26 c : '3' 27 } 28 let obj = { 29 a :'1', 30 c : '3' 31 } 32 let obj1 = { 33 a :'1', 34 c : '5' 35 } 36 let obj2 = { 37 a :'1', 38 b : '2' 39 } 40 41 console.log(Object.is(obj,object)) 42 console.log(Object.is(obj,obj)) 43 console.log(Object.is(obj,obj1)) 44 console.log(Object.is(obj1,obj2)) 45 console.log(Object.is(obj,{a:'1',c:'3'})) 46 console.log(Object.is(obj,{a:'1',c:'6'}))

Object.is() 方法会根据以下规则进行比较:

  1. 如果两个值都是 undefined,则它们被认为是相等的。
  2. 如果两个值都是 null,则它们被认为是相等的。
  3. 如果两个值都是 true 或 false,则它们被认为是相等的。
  4. 如果两个值是相同的字符串,则它们被认为是相等的。
  5. 如果两个值是相同的数字(包括 NaN),则它们被认为是相等的。
  6. 如果两个值引用同一个对象或函数,则它们被认为是相等的。
  7. 如果两个值都是 0,并且具有相同的符号,则它们被认为是相等的。

除了上述规则外,Object.is() 对于 +0-0NaNNaN 的情况有一些特殊之处

  • 对于 +0 和 -0,使用 Object.is() 会返回 false,而使用 === 运算符会返回 true
  • 对于 NaN,无论与任何值进行比较,包括自身,使用 Object.is() 都会返回 true,而使用 === 运算符会返回 false

Object.is() 方法的原理可以简单描述如下:

  1. 首先,检查两个值是否是相同的字符串,数字,布尔值,undefined 或 null,如果是,则按照上述规则返回相应结果。
  2. 接着,检查两个值是否为 +0 和 -0,如果是,则返回 false
  3. 然后,检查两个值是否为 NaN,如果是,则返回 true
  4. 最后,检查两个值是否引用同一个对象或函数,如果是,则返回 true

 

总的来说,Object.is() 在需要进行严格相等比较并且需要处理特殊值或避免类型转换的情况下是一个有用的工具。它提供了一种更精准的比较方式,帮助开发人员准确地判断值之间的关系,避免由于类型转换而导致的意外结果。

标签:false,log,Object,let,console,true
From: https://www.cnblogs.com/qinlinkun/p/18027524

相关文章

  • Vue学习笔记9--Object.defineProperty()
    Object.defineProperty()语法说明Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性obj需要定义属性的当前对象Object.defineProperty(obj,prop,desc)==》obj需要定义属性的当前对象prop当前需要定义的属性名desc属性描述......
  • Object方法 — Object.entries()
    Object方法—Object.entries()Object.entries()方法是JavaScript中的一个静态方法,用于返回一个给定对象自身可枚举属性的键值对数组。该方法接受一个对象作为参数,并将该对象的可枚举属性转换为一个二维数组,其中每个子数组包含两个元素:属性的键和属性的值。返回的数组中的......
  • TCL学习:First Class Tcl Objects and Relationships
    前言:最近需要移植vivado工程到新板卡上。之前只学了基础TCL语法,复杂一点的指令看博客看文档对陌生名词挠头。才发现官方文档VivadoDesignSuiteTclCommandReferenceGuide(UG835)第一章的FirstClassTclObjectsandRelationships对Vivado用到的TCL的指令做了很好的知识铺......
  • HarmonyOS—@Observed装饰器和@ObjectLink嵌套类对象属性变化
    @Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化概述@ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步:被@Observed装饰的类,可以被观察到属性的变化;子组件中@ObjectLink装饰器装饰的状态变量用于接收@Observed装饰的类的实例,和父组件......
  • kotlin--Object关键字
    1.匿名内部类Object可以实现,继承一个抽象类的同时,实现多个接口。interfaceA{funfunA()}interfaceB{funfunB()}abstractclassMan{abstractfunfindMan()}funmain(){//这个匿名内部类,在继承了Man类的同时,还实现了A、B两个接口......
  • Qt error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const
    简介  通过QtCreator开发一个动态库,最开始希望只是一个简单的纯C++的动态库,就没有继承QObject,也没有写Q_OBJECT宏。编译时就会报:LNK2001:无法解析的外部符号public:virtualstructQMetaObjectconst。绕了不少弯子,终于解决了,把原因分析进行个整理。面试有个问题:Qt信号槽机......
  • Qt error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const
    这个问题总是在编译的不经意间出现,而且一出一大片,很烦。作为新手出了问题可定要在网上找答案,但是总是发现别人的解决方法解决不了自己的问题,唉~在这个问题上大家大家提出的大多数是.h.cpp文件不对应、.h中声明的文件在.cpp文件中没有实现、函数声明在了.cpp文件中等等一......
  • Unity 2022.3.20f1新功能,异步实例化预制体Object.InstantiateAsync
    今天查看Unity2022.3.20f1更新日志,发现新增了个异步实例化的功能,这个功能解决了Unity历史上实例化预制体卡顿的痛点,简直不要太爽。具体的API文档请点击跳转。做了个简单的实例化测试,实例化500*500个Cube,耗时9.2s。实例化过程之间不会卡顿,可以做其他事情,即便是在重度游戏加载场......
  • Unity Scriptable Object概述
    如何理解ScriptableObjectScriptableObject是一种数据容器(datacontainer),通常被用来存储大量的数据,并且不依赖于类实例。换句话说,ScriptableObject本身就是一个存放数据的实例。ScriptableObject没有继承自MonoBehavior,而是继承自ScriptableObject,所以ScriptableObject不能......
  • C#对window 硬件类操作 ManagementObjectSearcher
    在解决方案--引用--右键--添加引用---程序集---框架---勾选System.Management 前言: 我们在很多情况下想要获得计算机的硬件或操作系统的信息,比如获得CPU序列号给自己的软件添加机器码锁绑定指定电脑。又或者想要获得硬盘分区,声卡显卡等信息。开篇:我们用到的主要类是Managem......