前端 JS 经典:双等号运算符的运算和转换规则

简介: 前端 JS 经典:双等号运算符的运算和转换规则

1. 运算规则

两端存在 NaN,返回 false

NaN == NaN; // false
NaN == 1; //false

undefinednull 只有与自身比较,或者相互比较时,才返回 true,和其他原始类型比较都返回 false。

undefined == null; // true
undefined == undefined; // true
null == null; // true

两端类型相同,比较值

1 == 2; // false
"yq" == "yqcoder"; // false

两端都是原始类型,转换成数字重新比较

0 == false; // true
"1" == 1; // true

一端是原始类型,一端是对象类型,把对象转换成原始类型后重新比较。

// 当有 [Symbol.toPrimitive] 符号时
let obj = {
  [Symbol.toPrimitive]() {
    return 2;
  },
};
obj == 2; // true
 
// 如果没有 [Symbol.toPrimitive]时, 先调用 valueOf() 拿原始值,如果没有再调用 toString() 拿原始值
let obj = {
  valueOf() {
    return {};
  },
  toString() {
    return 4;
  },
};
obj == 4; // true
 
// 使 obj == 1 && obj == 2 && obj == 3 成立
let obj = {
  count: 1,
  valueOf() {
    return this.count++;
  },
};
obj == 1 && obj == 2 && obj == 3; // true

2. 对象如何转原始类型

  1. 如果对象拥有[Symbol.toPrimitive]方法,调用该方法。若该方法能得到原始值,使用该原始值,若得不到原始值,抛出异常
  2. 调用对象的 valueOf 方法,若该方法能得到原始值,使用该原始值,若得不到原始值,进行下一步
  3. 调用对象的 toString 方法,若该方法能得到原始值,使用该原始值,若得不到原始值,抛出异常


目录
相关文章
|
5月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
189 1
|
6月前
|
JavaScript 前端开发
js小数运算出现的问题(精度丢失)及解决办法-亲测有效
JavaScript浮点数运算存在精度丢失问题,如0.1+0.2不等于0.3。原因是十进制小数转二进制时可能出现无限循环,导致舍入误差。本文提供一种精度处理方法,通过将小数转为整数运算后再还原,实现加减乘除的精确计算,解决常见浮点运算误差问题。
1075 0
|
11月前
|
JavaScript 前端开发 API
|
11月前
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
415 8
|
11月前
|
JavaScript 前端开发
|
11月前
|
存储 JavaScript 前端开发
|
11月前
|
移动开发 JavaScript 前端开发
|
11月前
|
存储 JavaScript 前端开发
|
11月前
|
JavaScript 前端开发
|
11月前
|
JavaScript 前端开发 开发者