实例分析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日

相关文章

  • defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法

    当我们在HTML页面中引入JQuery时,可以给<script>标签添加一个defer属性,来告诉浏览器在文档解析完成后再加载并执行该JS文件。但是,如果在使用defer属性时,JS文件中存在依赖JQuery的代码,就会导致页面在加载时出现错误。 这里提供两种解决方法: 方法一:将defer移除或替换为async 解决问题的一种方法是将<s…

    JavaScript 2023年6月10日
    00
  • js实现简单的随机点名器

    下面我将详细讲解“js实现简单的随机点名器”的完整攻略。 一、实现思路 准备一个名单数组,数组中包含所有需要点名的人员姓名; 编写js代码,随机在名单数组中选择一项,输出被选中的人员姓名。 二、代码实现 2.1 准备名单数组 // 名单数组 const nameList = [‘张三’, ‘李四’, ‘王五’, ‘赵六’]; 2.2 随机选取名单中的一项 /…

    JavaScript 2023年6月11日
    00
  • js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解

    那我就为你介绍一下 Javascript 中几个常用字符串相关的方法。 1. substr substr() 方法用于截取字符串中的任意部分,并返回截取的结果。substr() 方法有两个参数,第一个参数是起始索引位置,第二个参数是截取的长度。如果不指定第二个参数,则截取到末尾。其语法如下: str.substr(start[, length]) 示例代码:…

    JavaScript 2023年5月28日
    00
  • Vue elementUI实现免密登陆与号码绑定功能

    下面是详细的Vue elementUI实现免密登陆与号码绑定功能的攻略: 简介 Vue elementUI是常用的前端框架之一,它有完善的组件库,可以方便地实现各种功能。本次攻略将讲解如何使用Vue elementUI实现免密登陆与号码绑定功能。 免密登陆功能 前提条件 需要做到以下几点: 用户在第一次使用时填写并提交了手机号码; 站点后端需要可以将用户手机…

    JavaScript 2023年6月10日
    00
  • A标签中通过href和onclick传递的this对象实现思路

    在 A 标签中可以通过 href 和 onclick 属性同时传递 this 对象,以实现一些动态的交互效果。下面是具体步骤: 1.设置 A 标签的 href 属性 一般情况下,我们会在 A 标签中设置 href 属性,指定目标链接地址。例如: <a href="https://www.example.com">Link Ex…

    JavaScript 2023年6月11日
    00
  • js实现烟花特效

    下面是JS实现烟花特效的完整攻略: 1.实现思路 实现Canvas画布,用于绘制烟花效果; 生成烟花粒子,通过动画实现烟花特效。 2.代码实现 2.1 创建Canvas画布 创建一个id为firework的画布,用于绘制烟花特效。 <canvas id="firework"></canvas> // 获取画布元素 …

    JavaScript 2023年6月11日
    00
  • Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)

    下面是关于Bootstrap表单验证插件bootstrapValidator的完整攻略: 1. 什么是Bootstrap表单验证插件bootstrapValidator Bootstrap表单验证插件bootstrapValidator是一个基于Bootstrap3的表单验证插件,能够对常见的表单进行简单易用的验证,例如: 必填字段验证 电子邮件格式验证 U…

    JavaScript 2023年6月10日
    00
  • JS简单获得节点元素的方法示例

    下面我将为您详细讲解JS简单获得节点元素的方法示例的完整攻略。 核心概念 在JavaScript中,我们可以通过document对象的方法来获取节点元素,获取的节点元素可以是HTML、XML或是XHTML文档中的任何元素。document对象提供了多种获取节点元素的方法,常用的有getElementById()、getElementsByTagName()、…

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