1、== 相等运算符
如果 x 与 y 类型一致时规则如下:
1. 如果 x 类型为 Undefined,返回 true。
2. 如果 x 类型为 Null,返回 true。
3. 如果 x 类型为 Number,则,
a. 如果 x 为 NaN,返回 false。
b. 如果 y 为 NaN,返回 false。
c. 如果 x 与 y 为同一个数字,返回 true。
d. 如果 x 为 +0,且 y 为 -0,返回 true。
e. 如果 x 为 -0,且 y 为 +0, 返回 true。
f. 返回 false。
4. 如果 x 为 String,则当 x 和 y 为完全相同的字符序列
(长度相等且相同字符在相同位置)时返回 true,否则,返回 false。
5. 如果 x 为 Boolean, 当 x 和 y 为同为 true 或 false 时返回 true,
否则,返回 false。
6. 如果 x 和 y 引用到同一个 Object 对象,返回 true,否则,返回 false。
如果 x 为 Null 且 y 为 Undefined, 返回 true。
如果 x 为 Undefined 且 y 为 Null, 返回 true。
如果 x 为 Number 且 y 为 String, 返回比较 x == ToNumber(y)的结果。
如果 x 为 String 且 y 为 Number, 返回比较 ToNumber(x) == y的结果。
如果 x 为 Boolean 返回比较 ToNumber(x) == y的结果。
如果 y 为 Boolean 返回比较 x == ToNumber(y)的结果。
如果 x 为 String 或者 Number, 且 y 为 Object,
返回比较 x == ToPrimitive(y)的结果。
如果 x 为 Object, 且 y 为 String 或者 Number,
返回比较 ToPrimitive(x) == y的结果。
否则返回false。

2、=== 严格相等运算符

如果 x 与 y 类型不一致,返回 false。
如果 x 为 Undefined, 返回 true。
如果 x 为 Null, 返回 true。
如果 x 为 Number, 则,
a. 如果 x 为 NaN,返回 false。
b. 如果 x 为 NaN,返回 false。
c. 如果 x 与 y 为同一个数字, 返回 true。
d. 如果 x 为 +0,且 y 为 -0,返回 true。
e. 如果 x 为 -0,且 y 为 +0, 返回 true。
f. 返回 false。
如果 x 类型为 String, 如果 x 与 y 为完全相同的字符序列
(相同的长度和相同的字符对应相同的位置),返回 true,否则,返回 false。
如果 x 为 Boolean, 当 x 和 y 为同为 true 或 false 时,返回 true,
否则,返回 false。
如果 x 和 y 引用到同一个 Object 对象,返回 true,否则,返回 false。
3、Object.is 使用ES6 “Same-value equality”(同值相等)算法,内部严格比较SameValue(x,y)
如果 x 与 y 类型不一致,返回 false,否则, 类型一致时规则如下:
1. 如果 x 类型为 Undefined,返回 true。
2. 如果 x 类型为 Null,返回 true。
3. 如果 x 类型为 Number,则,
a. 如果 x 为 NaN,且 y 也为 NaN,返回 true。
b. 如果 x 为 +0,且 y 为 -0,返回 false。
c. 如果 x 为 -0,且 y 为 +0, 返回 false。
d. 如果 x 与 y 为同一个数字,返回 true。
e. 返回 false。
4. 如果 x 类型为 String, 如果 x 与 y 为完全相同的字符序列
(相同的长度和相同的字符对应相同的位置),返回 true,否则,返回 false。
5. 如果 x 为 Boolean, 当 x 和 y 为同为 true 或 false 时,返回 true,
否则,返回 false。
6. 如果 x 和 y 引用到同一个 Object 对象,返回 true,否则,返回 false。 Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
注: === 和 Object.js 比较差异主要体现在 NaN 及 正负0 的比较。
+0 === -0 // true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
4、ToPrimitive 方法 [[DefaultValue]] (hint)
  ToPrimitive 运算符把其值参数转换为非对象类型,主要理解为对象转换时处理步骤
当不用 hint 调用 O 的 [[DefaultValue]] 内部方法时,除非O 是 Date 对象的情况下把 hint 当作字符串一样解释它的行为,除此之外把 hint 当作数字一样解释它的行为
当期望转换hint类型为 Number 类型时:
1. 调用 valueOf 结果是原始类型,则返回;
2. 调用 toString 结果是原始类型,则返回;
3. 抛出 TypeError 异常。
当期望转换hint类型为 String 类型时:
1. 调用 toString 结果是原始类型,则返回;
2. 调用 valueOf 结果是原始类型,则返回;
3. 抛出 TypeError 异常。
当期望类型hint类型default时,除对象为Date时以String解释,其他情况以Number解释
// 确定 hint 类型
var a = {
[Symbol.toPrimitive](hint){
console.log('hint: ' + hint);
}
}
alert(a); // hint: string
`${a}`; // hint: string
+a; // hint: number
a + 1; // hint: default var b = new Date();
+b; // 1614261017044 当前hint: number
b + 1; // Thu Feb 25(...省略)1 当前hint: default 默认时以String 解析

比较运算规则 == 、 ===、Object.is 和 ToPrimitive 方法 [[DefaultValue]] (hint)的更多相关文章

  1. ECMAScript5 Object的新属性方法

    虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...

  2. toStirng()与Object.prototype.toString.call()方法浅谈

    一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种类型转化为字符串类型的呢? 通过下面几个例子,我们便能获得答案: 1.将boolean类型的值转 ...

  3. JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈

    toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种 ...

  4. js object 对象 属性和方法的使用

    //object 对象 属性和方法的使用 var person = new Object(); person.name="张海"; person.age="; perso ...

  5. js原型链接(二)和object类的create方法

    原型链的内部执行方式 <script> function Myclass(){ this.x=" x in Myclass"; } var obj=new Myclas ...

  6. Fatal error: Using $this when not in object context in 解决方法

    Fatal error: Using $this when not in object context in 解决方法 粗心造成的错误 $this 只存在于下面情况 $obj = new object ...

  7. Java基础知识强化26:Object类之hashCode()方法、getClass()方法

    1. Object类的hashCode()方法,如下: public  int  hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的 ...

  8. 【转】javascript Object使用Array的方法

    原文: http://www.cnblogs.com/idche/archive/2012/03/17/2403894.html Array.prototype.push push向数组尾部添加一项并 ...

  9. 关于Object类下所有方法的简单解析

    类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直接来看jdk的源码,开始我们的分析之路 ...

随机推荐

  1. 2021,狗狗币暴涨,VAST更加疯狂!

    2021年的币圈,多多少少出乎人的意料.很多币圈玩家们看好比特币,比特币却在达到4万美金的巅峰之后,极速下滑.很多玩家们看好以太坊,以太坊的手续费却出现了飙涨,让众多的中小散户们再次退却.而前几年已经 ...

  2. NGK算力市场,不止有动静态收益还有SPC空投!

    随着数字货币交易的火热,云算力挖矿也悄然崛起.越来越多的用户开启云算力挖矿,以获取更多的收益.相较于传统的矿机挖矿,用户通过购买算力进行云挖矿,节省了购买矿机以及维护的成本.另一方面,也降低了安全风险 ...

  3. JULLIAN MURPHY:拥有良好的心态,运气福气便会自来

    JULLIAN MURPHY是星盟全球投资公司的基金预审经理,负责星盟投资项目预审,有着资深的基金管理经验,并且在区块链应用的兴起中投资了多个应用区块链技术的公司. JULLIAN MURPHY认为往 ...

  4. 02.Fancy Indexing

    import numpy as np x = np.arange(16) index = [3,5,8] x[index] array([3, 5, 8]) X = x.reshape(4,-1) X ...

  5. Python学习笔记_购物车案例

    goods_dic = { "iphone":6000, "ipad":3000, "T-shirt":100, "coffee& ...

  6. Java中的CPU占用高和内存占用高的问题排查

    下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程.如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下. 1.Java CPU过高的问题排查 举个例 ...

  7. Python序列之列表(一)

    在Python中,列表是一种常用的序列,接下来我来讲一下关于Python中列表的知识. 列表的创建 Python中有多种创建列表的方式 1.使用赋值运算符直接赋值创建列表 在创建列表时,我们直接使用赋 ...

  8. IDEA重新安装之后配置GIT

    注:此方法可用于配置gitlab也可用于配置github 1.在github中创建一个账号:https://github.com/join?source=header-home 2.下载并安装git: ...

  9. oracle ORA-00257

    su - oracle sqlplus /nolog conn / as sysdba select * from v$flash_recovery_area_usage; select sum(pe ...

  10. MySQL如何搭建主库从库(Docker)

    目录 MySQL主从搭建 一.主从配置原理 二.操作步骤 1.创建主库和从库容器 2.启动主从库容器 3.远程连接并操作主从库 4.测试主从同步 MySQL主从搭建 一.主从配置原理 mysql主从配 ...