比较运算规则 == 、 ===、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的源码,开始我们的分析之路 ...
随机推荐
- js generator和yield
function co<T>(fn: () => Generator<any, any, any>): Promise<T> { const g: Gener ...
- 源码分析:Exchanger之数据交换器
简介 Exchanger是Java5 开始引入的一个类,它允许两个线程之间交换持有的数据.当Exchanger在一个线程中调用exchange方法之后,会阻塞等待另一个线程调用同样的exchange方 ...
- JDK源码阅读-FileDescriptor
本文转载自JDK源码阅读-FileDescriptor 导语 操作系统使用文件描述符来指代一个打开的文件,对文件的读写操作,都需要文件描述符作为参数.Java虽然在设计上使用了抽象程度更高的流来作为文 ...
- 死磕Spring之IoC篇 - BeanDefinition 的加载阶段(XML 文件)
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- js引入jquery问题
写jsp的时候明明已经引入了jquery组件,但是总是报错如下图 jsp代码如下 <%@ page language="java" contentType="tex ...
- 怎么去掉右下角的thinkphp的图标
关闭thinkphp右下角的trace可以试试以下步骤: 1.在入口文件index.php 加入 define("APP_DEBUG", false); 2.在config.php ...
- 后端程序员之路 59、go uiprogress
gosuri/uiprogress: A go library to render progress bars in terminal applicationshttps://github.com/g ...
- 后端程序员之路 38、Scala入门
Scala 是 Scalable Language 的简写,是一门多范式的编程语言. 语言特性:1.面向对象,所有值都是对象,类可以继承和组合:2.函数式,支持闭包,支持柯里化等等:3.静态类型,支持 ...
- Java练习——String类练习
需求: 给定一个字符串String str=" Hello World",返回长度,返回o第一次出现的索引,返回最后一个o的索引,把所有的l都替换为m,并把字符串str按空格分割为 ...
- 剑指 Offer 58 - I. 翻转单词顺序 + 双指针
剑指 Offer 58 - I. 翻转单词顺序 Offer_58_1 题目描述 方法一:使用Split函数 package com.walegarrett.offer; /** * @Author W ...