Javascript学习笔记之相等符号与严格相等符号
Javascript有两种方法来判断两种值是否相等。
相等符号
相等符号由两个等号组成:==
Javascript是弱类型语言。这就意味着相等符号为了比较两个值将会强制转换类型。
"" == "0" //false 0 == "" //true 0 == "0" //true false == "false" //false false == "0" //true false == undefined //false false == null //false null == undefined //true "\t\r\n" == 0 //true
上面的代码展示了类型转换的结果,因此我们知道使用相等符号==是个不好的编程习惯。由于Javascript中复杂的类型转换机制,将会使得由此产生的错误变得难以追踪。
此外,类型的强制转换会对性能也造成一定的影响,例如,当一个字符串与数字进行比较时,会被强制转换为数字。
严格相等符号
严格相等符号由三个等号组成:===
它跟相等符号的操作相似,但是严格相等符号不会做强制类型转换的操作。
"" === "0" //false 0 === "" //false 0 === "0" //false false === "false" //false false === "0" //false false === undefined //false false === null //false null === undefined //false "\t\r\n" === 0 //false
上面的代码使得代码更加清晰,如果两个值的类型不同则直接返回false,这也会使得性能得到提升。
比较对象
尽管==和===被称为相等符号,但是当比较的两个值中有一个类型是对象时,表现将大不相同。
{}==={}; //false newString('foo')==='foo';//false newNumber(10)===10; //false varfoo={}; foo===foo; //true
在这儿,不再仅仅是比较两个值是否相等,它将判断两个值是否引用同一个对象实例,这个行为比较像C中的指针。
总结
这里强烈建议只使用严格相等符号===。如果我们需要做类型转换,可以在比较前先做显式的类型转换,而不是靠Javascript本身复杂的强制转换方法。