JavaScript中==和===详解

    比较两个变量是否相等时,有==和===两种方式。

    ==的工作模式是,判断两边的变量是否为同种类型,如果不是同种类型则需要转变类型,再比较是否相等。===的工作模式是,判断两种类型是否为同种类型,如果是同种类型判断是否相等,不是同种类型就认为不相等。举例说明:

var a = "42";

var b = 42;

a = 42; //true,先将a转换成数字42,再比较

    也有人将==比作松散相等(值相等即可),将===比作绝对相等(类型和值都相等),===不多说什么,只阐述==。

一、声明规则

    重要的是,当==两边类型不同时,转换规则是什么。我们都知道,通过typeof()判断变量类型可能返回六种形式:number,string,boolean,object,undefined

    那么如果==两边类型不同,转换规则如下:一旦一边有数字则另一边试图转换为数字,一旦一边有数字则另一边试图转换为数字,凡事布尔都会转换成数字,,null和undefined另外讲。下面一点点将来

>代表转换成的意思

1 == "1"; //true "1">1

1 == new String("1"); //true obj>"1">1

1 == []; // false []>"">0,不相等

1 == [1]; //true,[1]>"1",>1

1 == [1,2]; //false [1,2]>"1,2">NaN,而NaN和谁都不相等

0 == [1,2]; //false 

1 == true; //true  true>1

0 == {};  // false  {}>常规对象>NaN,和谁都不等

这里涉及到一个问题,字符串转数字时,常规数字字符串转成数字,非常规转成NaN,如:

Number("123"); // 123

Number("1,2"); // NaN

二、null和undefined

null == undefined ; // true,这个东西特殊,记住吧

三、关于是否一定要用===

一直认为===准确度高,效率也会高,然而会增加代码复杂度,例如:

你可能感兴趣的:(JavaScript中==和===详解)