宝哥软件园

你对JavaScript中的三个等号和两个等号了解多少

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

介绍

众所周知,js有六种假值:false,null,undefined ' ',NAN,0。让我们从几个例子开始:

[]===[]nan===nan nan==nan 0==[]' '=[]'=={ }[]==undefined { }==[]null==undefined以上判断结果是什么?你能一眼就知道结果吗?我过去对==和===只有一个大概的印象。相信大家都知道==判断如果两边变量的类型不一样,会先做类型转换再做判断,而===不做类型转换。如果类型不同,它们必须返回false。不过,笔者最近看到一个话题,觉得很有意思。我贴出来给大家看:

var x=1;var obj={ value of : function(){ x=2;返回{ 0 } } console . log(obj==0,x)嗯,这段代码的输出结果是真的,2,是不是不可思议?还有~

var x=1;代码varobj={ value of : function(){ return } },tostring 3360 function(){ return } } } console . log(obj==0)直接抛出异常: unsughttypeerror 3360无法将对象转换为基元值。

如果你和我一样觉得奇怪,继续往下看~

===

这个比较简单。我会列出规则

如果类型不同,它们就不相等。如果它们都是数值并且是相同的值,则它们是相等的,除了如果它们中至少有一个是NaN,则它们是不相等的。(判断一个值是否为NaN,只能通过is NaN()来判断。)如果两者都是字符串,并且每个位置的字符相同,那么它们是相等的;否则,它们是不平等的。如果两个值都为真或都为假,则它们相等。如果两个值引用同一个对象或函数,则它们相等;否则,它们是不平等的。如果两个值都为空或未定义,则它们相等。不难发现,复合数据(如对象、数组、函数等)之间的比较。)不是比较它们的值是否相等,而是比较它们引用的对象是否相同,所以不难理解为什么[]==[]被判定为假。

例如:

==探索

看看==

如果两个值类型相同,比较===。如果两种值类型不同,它们可能相等。类型转换和比较按照以下规则进行:如果一个为空,另一个未定义,则两者相等。如果一个是字符串,另一个是数值,请将字符串转换为数值,然后进行比较。如果任何值为真,将其转换为1并再次比较;如果任何值为假,将其转换为0并再次比较。如果一个是对象,另一个是数值或字符串,则将该对象转换为基础类型的值并进行比较。使用其toString或valueOf方法将。Js核心内置类将在toString之前尝试valueOf。例外是日期,它使用了字符串转换。不是js核心的对象会很麻烦。有兴趣的同学可以研究其他任何组合,都是不平等的。看到这里,第6条,我们可以理解为什么上面的代码会输出意想不到的结果,甚至抛出错误。

让我们再看一个问题:

如果(x==10) x=5根据上面的规则,想象一下如果我们输入的x是一个20的字符串,那么x的结果会是什么。是的,它是20 5,通常在这种情况下,我们的目的是计算205的值。

结合以上例子不难看出==的比较似乎更方便,比如1=='1 ',但会埋下隐患,比如对类型做错误的假设。所以大部分人建议我们少用==尽量用===。其实我也推荐,如果我们清楚的知道类型,最好用===。

另一个简单的例子:你必须在团队合作中阅读别人的代码。当你看到==,你应该判断作者的代码意图是否真的需要转换,是否需要转换不重要,或者是否不应该转换但是写错了.它比显式===(加上可能需要的显式转换)需要更多的脑力和时间。这样想,===不要太好。

了解了===的机制,就很容易判断这六个假值了。

简单看几个例子,看看是真是假~

false==' ' false==[]0==[]' '==[]=[]=[]=={ } null==undefined false==undefined summary

图片可以用来表示几个=返回真的假值:

首先看双等号前后是否有NaN。如果有NaN,总会返回false。

二看双等号前后是否有布尔。如果有布尔值,会转换成数字。(假为0,真为1)

第三,再看双等号前后是否有字符串。有三种情况:

对方是一个对象,使用toString()或valueOf()转换对象;对方是数字,字符串转换成数字;对方是字符串,直接比较;其他人返回假。如果是数字,对方是对象,对象取valueOf()或toString()进行比较。其他的总是返回false null,undefined不会执行类型转换,但是它们和postscript是相等的

我的建议是:如果真的知道自己在做什么(知道类型转换的结果),可以用==;否则,使用===。

可以参考网上偶然看到的图片:

==符号

===符号

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+