javascript--==vs===高级语言层出不穷。虽然每一种语言都有相同的思想,但它仍然有自己独特的设计理念和语法。js有很多容易混淆的地方1.==vs===equaltocongruent在js中很容易混淆。比较有意思的一件事是突然想到在switch语句中使用哪种比较方式。比较之前,我们先看看下面的别着急,switch使用了===的比较方式。其实在ESlint的语法检测中,建议放弃==方法,使用===方法。var='1';switch(a){案例1:console.log('==');休息;案例“1”:console.log('===');休息;default:}//=====和===更高一层,先说说===的比较规则===比较规则:1.如果类型不同,则[notequal]2.如果两者都是数值,并且是相同的值,那么[equal];(!exception)是[notequal]如果至少其中之一是NaN。(只能用isNaN()来判断一个值是否为NaN)3、如果都是字符串,并且每个位置的字符都相同,则[equal];否则[不等于]。4.如果两个值都为真,或者都为假,则【相等】。5.如果两个值都引用同一个对象或函数,那么[equal];否则[不等于]。6.如果两个值都是null或者都是undefined,那么[equal]==比较规则:1.如果两个值是同一类型,进行===比较。2.如果两个值的类型不同,则它们可能相等。进行类型转换,然后按照以下规则进行比较:a.如果一个为null而另一个未定义,则[equal]。b.如果一个是字符串,另一个是值,则在比较之前将字符串转换为值。C。如果任何一个值为真,则将其转换为1并进行比较;如果任何值为false,则将其转换为0并进行比较。d.如果一个是对象,另一个是值或字符串,则将对象转换为基础类型的值并进行比较。使用其toString或valueOf方法将对象转换为基础类型。JS核心内置类会在toString之前尝试valueOf;Date除外,它使用toString转换。对于非js核心对象来说(比较麻烦,自己也不太懂)e.其他任何组合都是[不等于]==和===相比,如果对象类型不同,会增加一层自动转换,在写js的时候,尽量用===代替,这样可以省去不必要的bug陷阱。另外需要注意的是,switch中的数据类型可以是任意类型,这一点不同于c、java等。
