实例分析JS中的相等性判断===、 ==和Object.is()

当我们在JavaScript中需要判断两个值是否相等时,经常会用到的操作符有三个:全等比较符===,等于比较符==Object.is()方法,但它们之间存在某些细微而重要的区别。接下来,我们将逐一介绍它们的用法及特点。

全等比较符===

全等比较符比较两个值是否严格相等,它要求比较对象的类型和值都相等才会返回true,否则返回false。下面是一个简单的例子,展示了全等比较符的用法:

const a = 123;
const b = "123";
console.log(a === b);   // false
console.log(a === Number(b));   // true

在上面的例子中,尽管a和b的值看起来相同,但它们的类型不同。当我们使用全等比较符进行比较时,它会检查两个值的类型和值是否完全相等,因此返回了false。

等于比较符==

等于比较符用于判断两个值是否相等,但它不要求值的类型必须一致。如果两个值的类型不同时,它会进行类型转换再进行比较,因此可能会导致一些令人意外的结果。下面是一个例子,演示了等于比较符的用法:

const a = 123;
const b = "123";
console.log(a == b);   // true
console.log(true == 1);   // true
console.log(null == undefined);   // true

在上面的例子中,等于比较符会把字符串"123"转换成数字123,然后才进行比较,因此返回了true。类似地,布尔值true会被转换成数字1,null和undefined会被认为是相等的。

然而,由于等于比较符会自动进行类型转换,因此可能会导致一些奇怪的结果,例如:

console.log("0" == false);   // true
console.log("" == false);   // true
console.log(" " == false);   // true

在上面的例子中,等于比较符把字符串"0"转换成了数字0,把空字符串""和空格" "都判定为false,因此返回了true。如果没有了解这种类型转换的规则,可能会导致不必要的错误。

Object.is()方法

Object.is()方法是ES6添加的新特性,它可以用于比较两个值是否相等,与===比较符的行为类似。不同之处在于它对某些特殊的值进行了特殊处理。下面是一个例子:

console.log(Object.is(123, "123"));  // false
console.log(Object.is(NaN, NaN));  // true
console.log(Object.is(+0, -0));  // false

在上面的例子中,我们可以看到,Object.is()方法会把NaN自身和其他的NaN判断为相等;同时它会把+0和-0判断为不相等,这和全等比较符的行为是不一样的。

实例分析

看完以上的介绍,我们可以来看两个实例分析,分别使用全等比较符和Object.is()方法:

示例一:

console.log(3 === 3);    // true
console.log(3 === "3");  // false
console.log(Object.is(3, 3));    // true
console.log(Object.is(3, "3"));  // false

在上面的例子中,全等比较符和Object.is()方法都能准确地判断出两个数字是否相等。

示例二:

console.log([] === []);    // false
console.log(Object.is([], []));    // false
console.log(Object.is(NaN, NaN));    // true

在上面的例子中,我们可以看到,尽管两个空数组在一个环境中都是空的,但它们是不同的对象,因此全等比较符和Object.is()方法都返回了false。而在第三个例子中,由于NaN是不等于任何值(包括它本身),因此Object.is()方法会返回true。

总体来说,全等比较符和Object.is()方法都有各自的用处。全等比较符用于判断两个值是否严格相等,它不自动进行类型转换,能够确切地判断类型和值是否相等;而Object.is()方法则更加契合人类感知相等的概念,同时对于一些特殊的值也有了更加准确的处理。在应用时,我们应该根据具体的场景选择合适的判断方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:实例分析JS中的相等性判断===、 ==和Object.is() - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js replace() 文本替换你所不知的

    接下来我将详细讲解一下 JavaScript 中的 replace() 方法,包括它的用法、语法、返回值、示例等内容。 replace() 方法的用途 在 JavaScript 中,replace() 方法是用来在一个字符串中查找指定值或正则表达式,并将匹配的部分替换为另一个指定的值或字符串。 replace() 方法的语法 replace() 方法的基本语…

    JavaScript 2023年5月28日
    00
  • Webpack devServer中的 proxy 实现跨域的解决

    下面是关于Webpack devServer中的proxy实现跨域的详细攻略。 什么是跨域 跨域是指在浏览器中运行的脚本(通常指JavaScript脚本)试图访问一个不同源(协议、域名、端口号不同)的页面所产生的限制。由于同源策略的限制,JavaScript通常只能访问与包含它的页面位于同一域名下的资源。 解决跨域的方法 通常情况下,跨域的解决方法可以归纳为…

    JavaScript 2023年6月11日
    00
  • js在HTML的三种引用方式详解

    我来详细讲解“js在HTML的三种引用方式详解”。 什么是js在HTML的三种引用方式 在HTML中,我们可以通过三种不同的方式引入JavaScript代码,让我们的网页拥有更多的交互性和动态效果。这三种引用方式分别是: 内部文件引用:在HTML文件中使用<script>标签引入JavaScript文件; 外部文件引用:在HTML文件中使用&lt…

    JavaScript 2023年5月27日
    00
  • ThinkPHP框架表单验证操作方法

    当我们开发一个网站或者应用时,表单验证是不可或缺的一部分。ThinkPHP框架提供了丰富的验证器功能,可以有效减少我们手动编写表单验证的代码量。下面是详细讲解ThinkPHP框架表单验证操作方法的攻略。 1. 常用场景 ThinkPHP框架的验证器功能可以应用于多种场景,包括但不限于以下几种: 表单提交验证 接口数据验证 参数校验 在这个攻略中,我们重点讨论…

    JavaScript 2023年6月10日
    00
  • 小发现之浅谈location.search与location.hash的问题

    标题:小发现之浅谈location.search与location.hash的问题 背景介绍 location.search与location.hash是前端开发中常用的两个属性,它们分别用于获取当前url中带的查询参数和锚点参数。这两个属性的使用方式不同,而且在某些情况下会出现一些问题,需要特别注意。 location.search与location.ha…

    JavaScript 2023年6月11日
    00
  • Javascript实现重力弹跳拖拽运动效果示例

    讲解“Javascript实现重力弹跳拖拽运动效果示例”的完整攻略如下: 【示例1】实现有重力的弹跳运动效果 1.效果实现思路 要实现有重力的弹跳运动效果,需要分为以下几个步骤: 定义小球元素 设置小球的初始位置和速度 定义重力加速度 实现小球的弹跳运动 给小球添加事件 2.代码实现 下面是完整的代码实现: <!DOCTYPE html> &lt…

    JavaScript 2023年6月11日
    00
  • 一文总结JavaScript中Promise遇到的问题

    一文总结JavaScript中Promise遇到的问题 Promise是什么? Promise是一种规范,主要解决了JavaScript中回调地狱的问题,可以让我们更加方便地进行异步编程。Promise主要有以下三种状态: Pending(进行中) Fulfilled(已完成) Rejected(已拒绝) Promise的基本用法 function fetc…

    JavaScript 2023年5月28日
    00
  • js设置默认时间跨度过程详解

    JavaScript 设置默认时间跨度过程详解 在编写网站或应用程序时,常常需要对一些时间进行处理。如果存在时间跨度选择功能,通常也需要为其提供默认时间跨度。下面将讲解如何使用 JavaScript 设置默认时间跨度。 一、获取当前时间 在设置默认时间跨度之前,我们需要先获取当前时间。可以使用 JavaScript 中的Date对象来获取。 const no…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部