比较运算规则 == 、 ===、Object.is 和 ToPrimitive 方法 [[DefaultValue]] (hint)
如果 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。
如果 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
当期望转换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)的更多相关文章
- ECMAScript5 Object的新属性方法
虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...
- toStirng()与Object.prototype.toString.call()方法浅谈
一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种类型转化为字符串类型的呢? 通过下面几个例子,我们便能获得答案: 1.将boolean类型的值转 ...
- JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈
toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种 ...
- js object 对象 属性和方法的使用
//object 对象 属性和方法的使用 var person = new Object(); person.name="张海"; person.age="; perso ...
- js原型链接(二)和object类的create方法
原型链的内部执行方式 <script> function Myclass(){ this.x=" x in Myclass"; } var obj=new Myclas ...
- Fatal error: Using $this when not in object context in 解决方法
Fatal error: Using $this when not in object context in 解决方法 粗心造成的错误 $this 只存在于下面情况 $obj = new object ...
- Java基础知识强化26:Object类之hashCode()方法、getClass()方法
1. Object类的hashCode()方法,如下: public int hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的 ...
- 【转】javascript Object使用Array的方法
原文: http://www.cnblogs.com/idche/archive/2012/03/17/2403894.html Array.prototype.push push向数组尾部添加一项并 ...
- 关于Object类下所有方法的简单解析
类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直接来看jdk的源码,开始我们的分析之路 ...
随机推荐
- 使用控制台启动Android设备模拟器
文档 > emulator -list-avds Nexus_5X_API_28_x86 Pixel_2_XL_API_28 > emulator.exe -avd Pixel_2_XL_ ...
- 最常用SQL joins:内连接(交集)、左外连接、右外连接、左连接、右连接、全连接(并集),全外连接
1.内连接.两个表的公共部分用Inner join,Inner join是交集的部分. Select * from TableA A inner join TableB B on A.key=B.ke ...
- 后端程序员之路 14、NumPy
NumPy - NumPyhttp://www.numpy.org/ NumPy-快速处理数据 - 用Python做科学计算http://old.sebug.net/paper/books/scipy ...
- 剑指 Offer 14- I. 剪绳子 + 动态规划 + 数论
剑指 Offer 14- I. 剪绳子 题目链接 还是343. 整数拆分的官方题解写的更清楚 本题说的将绳子剪成m段,m是大于1的任意一个正整数,也就是必须剪这个绳子,至于剪成几段,每一段多长,才能使 ...
- HDOJ-3038(带权并查集)
How many answers wrong HDOJ-3038 一个很好的博客:https://www.cnblogs.com/liyinggang/p/5327055.html #include& ...
- JavaScript中的事件循环机制跟函数柯里化
一.事件循环机制的理解 test();//按秒输出5个5 function test() { for (var i = 0; i < 5; i++) { setTimeout(() => ...
- 如何自己配置pip源
方式一:临时使用国内pypi镜像安装 pip install -i http://pypi.douban.com/simple/ numpy pip install -i http://pypi.do ...
- mysql操作和详解
温馨提示 mysql安装包里面:mysqld是服务端,mysql是客户端. mysqld其实是SQL后台程序(也就是MySQL服务器),它是关于服务器端的一个程序,mysqld意思是mysql dae ...
- python-顺序串基本操作的实现
1 #*********************************************************************** ** 2 #> File Name: seq ...
- PTA 中序输出叶子结点
6-8 中序输出叶子结点 (10 分) 本题要求实现一个函数,按照中序遍历的顺序输出给定二叉树的叶结点. 函数接口定义: void InorderPrintLeaves( BiTree T); T ...