时间:2021-05-26
引子
众所周知,用在if条件判断语句中,js有六种假值:false, null, undefined, '', NAN, 0。先来看几个例子:
[] === []NaN === NaNNaN == NaN0 == []'' == []'' == {}[] == undefined{} == []null == undefined以上这些判断结果是什么,大家能否一看就知道结果呢?笔者以前对==和===都只有大概的印象,相信大家也都知道,== 判断如果两边变量的类型不同,会将其先做类型转换再作判断,而 === 则不做类型转换,如果类型不同,就一定返回 false。但是笔者最近看到了一个题目,感觉很有意思,贴出来给大家看看:
var x = 1;var obj = { valueOf: function(){ x = 2; return 0 } }console.log(obj == 0, x)恩,这段代码输出的结果是 true, 2,是不是不可思议?还有~
var x = 1;var obj = { valueOf: function(){ return {} }, toString: function(){ return {} } } console.log(obj == 0)这段代码直接抛出了异常: Uncaught TypeError: Cannot convert object to primitive value。
如果你和我一样觉得很奇怪,那就继续往下看吧~
===的规则
这个比较简单,我把规则罗列一下
这里不难发现,复合类型的数据(比如对象、数组、函数等)之间的比较不是比较他们的值是否相等,而是比较他们引用的对象是否一样,因此也不难明白,为什么 [] === [] 判断为false了。
比如:
==探究
看下 == 的规则
看到这里,第六条,我们就可以明白,为什么上面的代码会输出意想不到的结果甚至抛出错误了。
再来看一题:
if (x == 10) x += 5根据上面的规则,试想一下,如果我们输入的x是字符串20,那么x的结果会变成什么样?没错,就是205,而往往这种情况我们的目的是想计算20+5的值。
综合上面的例子,不难看出,== 的比较看似会比较方便,比如 1 == '1' ,但是会埋下隐患,比如可能对类型做出错误的假设。因此大多数人建议我们少用== 而尽量使用 ===,事实上我也推荐如果明确知道类型,还是最好用===。
再举个简单的例子:团队协作中你肯定需要读别人的代码。而当你看到==时,要判断清楚作者的代码意图是确实需要转型,还是无所谓要不要转型只是随手写了,还是不应该转型但是写错了……所花费的脑力和时间比明确的===(加上可能需要的明确转型)要多得多。这样一想,===不要好太多。
明白了==的机制,那么判断这6个假值,就变得容易了。
简单看看几个例子,大家看看是真是假~
false == ''false == []0 == []'' == [][] == [][] == {}null == undefinedfalse == undefined总结
可以用一张图来表达 == 返回true的几个假值:
一、首先看双等号前后有没有NaN,如果存在NaN,一律返回false。
二、再看双等号前后有没有布尔,有布尔就将布尔转换为数字。(false是0,true是1)
三、接着看双等号前后有没有字符串, 有三种情况:
后记
我的建议是:如果你的的确确知道你在做什么(了解类型转换的结果),可以用==;否则还是用===吧。
在网上无意中看到的图,大家可以参考看看:
==号
===号
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一个等号=:表示赋值;两个等号==:先转换类型再比较;三个等号===:先判断类型,如果不是同一类型直接false。以上就是小编为大家带来的细数JavaScrip
在Javascript中判断相等关系有双等号(==)和三等号(===)两种。其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否完全相等)。因
在这之前我们比较值使用两等号“==”或三等号“===”,三等号更加严格,只要比较两方类型不同立即返回false。另外,有且只有一个值不和自己相等,它是NaN现在
Javascript有两种方法来判断两种值是否相等。相等符号相等符号由两个等号组成:==Javascript是弱类型语言。这就意味着相等符号为了比较两个值将会强
本章节介绍一下javascript中等号运算符的用法,需要的朋友可以做一下参考。等号运算符最为基本的用法就是比较两个运算数是否相等,看如下代码实例:复制代码代码