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

yizhihongxing

当我们在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日

相关文章

  • 老生常谈JavaScript 函数表达式

    JavaScript 函数表达式是一种将函数作为值进行赋值或传递的方式。 函数表达式的语法 函数表达式的语法格式为:变量名 = function() {} 其中,变量名可以接受任何有效的 JavaScript 变量名。而函数表达式的主体内容则放在花括号中,可以包含任何有效的 JavaScript 语句和表达式。 下面是一个简单的例子: var func = …

    JavaScript 2023年6月11日
    00
  • JavaScript Dom对象的操作

    JavaScript DOM(文档对象模型)是一种使用JavaScript进行web页面编程的基本方式。它提供了API(应用程序接口),用于操作HTML和XML文档。在JavaScript中,DOM是一个对象层次结构,允许开发人员轻松地对HTML标记进行操作和访问。下面是JavaScript Dom对象的基本操作攻略: 获取元素 通过ID获取元素 javas…

    JavaScript 2023年5月27日
    00
  • JS获取单击按钮单元格所在行的信息

    获取单元格所在行的信息一般需要以下步骤: 对表格中的按钮进行事件绑定 在事件绑定的回调函数中获取按钮所在的单元格元素td 获取单元格所在的行元素tr 根据需要获取行元素tr中的其他信息 以下是两条示例: 示例一 HTML代码: <table> <thead> <tr> <th>ID</th> &lt…

    JavaScript 2023年6月11日
    00
  • 使用纯前端JavaScript实现Excel导入导出方法过程详解

    使用纯前端JavaScript实现Excel导入导出方法可以让用户方便地在浏览器中处理Excel文件,方便快捷,本文将详细讲解该过程。 实现Excel导入 前提条件 实现Excel导入,需要先在HTML代码中添加一个文件上传的input元素,例如: <input type="file" id="fileInput&quot…

    JavaScript 2023年5月27日
    00
  • ES6知识点整理之函数数组参数的默认值及其解构应用示例

    ES6知识点整理之函数数组参数的默认值及其解构应用示例 函数参数的默认值 在ES6之前,函数的参数如果没有传入值,则默认为undefined。 function func(a, b) { console.log(a, b); } func(1) //输出:1 undefined 在ES6中,函数的参数可以设置默认值,当没有传入该参数时,将使用设定的默认值。默…

    JavaScript 2023年5月28日
    00
  • js调试工具 Javascript Debug Toolkit 2.0.0版本发布

    JavaScript Debug Toolkit是一款网页开发调试工具,使用它可以帮助开发者快速定位及解决网页中的错误。下面是使用JavaScript Debug Toolkit的完整攻略。 安装 为了使用JavaScript Debug Toolkit,你需要将它下载到本地。你可以从GitHub上下载JavaScript Debug Toolkit的最新版…

    JavaScript 2023年6月11日
    00
  • 使用SWFObject完美解决HTML插入Flash的各浏览器兼容性方案

    使用SWFObject插入Flash可以通过JavaScript动态生成Flash对象,并通过检测当前浏览器是否支持HTML5的canvas元素,自动选择使用原生HTML5的canvas元素或者使用Flash来显示动画。这种方法可以解决HTML插入Flash的各浏览器兼容性问题,并且也可以提高网站的性能。 以下是使用SWFObject完美解决HTML插入Fl…

    JavaScript 2023年6月10日
    00
  • 纯js实现页面返回顶部的动画(超简单)

    以下是纯JS实现页面返回顶部动画的攻略: 1. 准备工作 在 HTML 的 head 标签中引入一个自定义的 JavaScript 文件,比如: <head> <script src="js/scroll-top.js"></script> </head> 2. 编写 JavaScript …

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