[Day06] 自动转型

两等号与三等号( == 与 === )的差别

在 JavaScript 里一个等号 = 代表的意思是指定、赋值。
而两个等号跟三个等号是用来比较数值。

比较运算子(Comparison Operators)

两等号 ==:若两边型别不同会自动转型再进行比较。
三等号 ===:不做转型直接比较。

容易造成的误解:两等号不检查型别,三等号会检查型别。
真相是:两等号会自动转型,三等号不会。

var a = 21;
var b = "21";

console.log(a==b); // true,b 字串被自动转型成数字所以相等
console.log(a===b); // false,不做转型直接比较

再来看看一些有趣的结果

true == 1; // true,左边 true 布林值转数字是 1
true == "true"; // false,"true" 字串转成数字是 NaN
false == 0; // true,左边 false 布林值转数字是 0
false == "false"; // false,"false" 转数字也是 NaN
[] == []; // false,记忆体位置不同

转自 MDN 比较运算子

P.S. => 是 ES6 的箭头函式,不是运算子,可以用书写顺序不同来分别。

自动转型的规则

JavaScript 经常会对两侧数值做自动转型,规则如下:

  • 其一为 Boolean,会将布林值转为数字。
  • 若字串与数字做比较,会将字串透过 Number() 尝试转成数字,再进行比较。
  • 其一为物件另一方为基本型别,会透过 valueOf() 方法取得对应的基本型别的值,再进行比较。
  • NaN 不等於 NaN,两等或三等都一样。
  • 两个 Object 进行比较,会看两者是否指向同一个实体(记忆体位置)
  • 字串大於小於的比较,会依照字母的顺序(standard lexicographical ordering)进行比较。大小写 unicode 的顺序不一样

一般不会遇到太多极端的情况(如果遇到了就只能...),这里有一个真值表可以仔细观察转型规则。

参考资料
0 陷阱!0 误解!8 天重新认识 JavaScript!
MDN 比较运算子
真值表转自 https://thomas-yang.me/projects/oh-my-dear-js/


<<:  DAY6 建立Messaging API channel

>>:  Day21 测试写起乃 - Webmock

D3JsDay01 资料视觉化 图表说说话—介绍篇

简介 本系列内容将会提及D3Js和资料相关内容的知识,主题订定为资料驾驭网页,其实一部分原因来自D3...

(特别篇)统计学的陷阱区,用资料绘制盒须—爬虫D3做成D3(下)

前言 本日主要内容包含另一个网路撷取资料方式Convert HTML Tables To JSON、...

开发环境与部署环境不同时的解决方案

我的开发环境是ubuntu20,但是部署环境是ubuntu18; 开发的语言是python,出现了一...

18 程序竞赛前中後准备实例 (NCPC 2021)

昨天写完「程序竞赛前中後准备技巧」後,今天下午便紧接着 NCPC,因此想趁这个机会做个纪录,顺便为上...

[Day1] 简单介绍 Google Assistant 语音应用程序

大家好,我是Hank。 目前就读於台科大资工所的研究生。 很高兴有机会向大家分享我在开发Google...