资讯专栏INFORMATION COLUMN

FE.ES-ECMA中的相等性判断

banana_pi / 1262人阅读

摘要:引用同一个对象,否则。不同,同是或,有,数值相等相等否则同是或,正常比较。于是我们可以测试参考中的相等性判断

概要

本文主要讨论以下几种比较操作:

== 宽松相等 ("double equals"),将执行类型转换

=== 严格相等 ("triple equals" 或 "identity")

Object.is (ECMAScript 2015/ ES6 新特性)与三等号相同,但是对于NaN和-0和+0进行特殊处理

以及ECMA中的ToPrimitive,ToBoolean,ToNumber官方文档的实现逻辑

==
若type相同
    1.同是Undefined或Null,true
    2.同是Number
        有NaN,false
        数值相等(±0相等)true,否则false
    3.同是String或Boolean,正常比较。
    5.引用同一个对象,true,否则false。
null,undefined:true
string,number: x == ToNumber(y)
有boolean:ToNumber(x)== y
String|Number,Object:x == ToPrimitive(y)
返回false。

===
type不同,false
同是undefined或null,true
Number
    有NaN,false
    数值相等(±0相等)true,否则false
同是String或Boolean,正常比较。

Object.is
Object.is = function(x, y) {
    // SameValue algorithm
    if (x === y) { // Steps 1-5, 7-10
      // Steps 6.b-6.e: +0 != -0
      return x !== 0 || 1 / x === 1 / y;
    } else {
      // Step 6.a: NaN == NaN
      return x !== x && y !== y;
    }
  };
if(val)
return Boolean(val)===true
ToBoolean

ToNumber

ToPrimitive

于是我们可以测试

var a=[]
a.toString()
//""
a==""
//true
a==true
//false
a.toString=function(){return true}
a==true
//true
参考

MDN JavaScript 中的相等性判断
ECMS-262
JavaScript-Equality-Table

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98818.html

相关文章

  • 【前端工程师手册】说清楚JavaScript中的相等判断

    摘要:如果没有传入的话如果是类型,则取否则,取这个方法大致和一样,除了以下返回返回参考知乎中和区别是什么全面解析中的数据类型与类型转换规范 有哪些判断相等性的方法 JavaScript现在提供了三种方法来判断相等性: ===,三个等号即严格相等 ==,两个等号即宽松相等 Object.is(),ES6中用来判断相等的方法 判断相等性的细节 ===(严格相等) 被比较的两个数不会进行类型转...

    crossoverJie 评论0 收藏0
  • 【重温基础】18.相等判断

    摘要:通常在转换不同数据类型时,相等和不相等会遵循以下规则若有一个操作数是布尔值,则比较前会将布尔值转换为数值转为,转为。 本文是 重温基础 系列文章的第十八篇。今日感受:优化自己的代码,也是很愉快的事情。 系列目录: 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理) 【重温基础】1-14篇 【重温基础】15.JS对象介绍 【重温基础】16.JSON对象介绍 【重温基础...

    赵春朋 评论0 收藏0
  • 第3章:抽象数据类型(ADT)和面向对象编程(OOP) 3.5 ADT和OOP中的等价

    摘要:抽象函数引发的关系是等价关系。所以当且仅当通过调用抽象数据类型的任何操作不能区分它们时,两个对象是相等的。必须为每个抽象数据类型适当地定义操作。一般来说,在面向对象编程中使用是一种陋习。 大纲 什么是等价性?为什么要讨论等价性?三种等价性的方式==与equals()不可变类型的等价性对象契约可变类型的等价性自动包装和等价性 什么是等价性?为什么要讨论等价性? ADT上的相等操作 ADT...

    Fundebug 评论0 收藏0
  • JavaScript疑难杂症系列-相等判断

    摘要:同一类的复合类型值两个复合类型对象数组函数的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。宽松相等双等号将执行类型转换原始类型的值原始类型的数据会转换成数值类型再进行比较。 事件这块知识点虽然是老生长谈的,但对于我来说多多整理,多多感悟,温故知新,每次看看这块都有不同的收获.(在这里我不会长篇大论,只会挑重点;具体的小伙伴们自行查找)参考:https://dev...

    Flink_China 评论0 收藏0
  • JavaScript疑难杂症系列-相等判断

    摘要:同一类的复合类型值两个复合类型对象数组函数的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。宽松相等双等号将执行类型转换原始类型的值原始类型的数据会转换成数值类型再进行比较。 事件这块知识点虽然是老生长谈的,但对于我来说多多整理,多多感悟,温故知新,每次看看这块都有不同的收获.(在这里我不会长篇大论,只会挑重点;具体的小伙伴们自行查找)参考:https://dev...

    2bdenny 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<