引言 javascript
在javascript中,你可能会写出如下两段代码: java
if (x == y) { // do something here }或者
if (x === y) { // do something here }这两端代码的区别是:第二段代码使用了三等于运算符,也称为严格至关或恒等于运算符。对于Javascript初学者来讲,可能提倡使用三等于运算符,不用双等运算符。但就是不明白为何,他们二者的区别又是什么?
二者区别 浏览器
在使用双等运算符的比较中,若是被比较的两个值相等,将返回true(真)。但有种状况:在类型不一样的两个值之间比较时,就会发生强制转换。每一个JavaScript值属于一个特定的“类型”。这些类型是:数字,字符串,布尔值,函数和对象。因此,若是你尝试用字符串(string)和数字(number)进行比较,浏览器在比较以前,就会尝试把字符串转换成数字,再进行比较。一样,若是用真(true)或假(false)与数字(number)进行比较,它会把真或假转化为1或0 。 函数
这会带来不可预知的后果,下面是一些例子: 测试
console.log(99 == "99"); // true console.log(0 == false); // true尽管看起来没有问题,但它能够引发麻烦,例如:
console.log(' \n\n\n' == 0); // true console.log(' ' == 0); // true鉴于此,多数javascript专家建议使用三等运算符,不用双等运算符。由于三等运算符历来不会强制类型转换。这意味着:使用三等运算符,上面四个例子将会获得正确的结果。
console.log(99 === "99"); // false console.log(0 === false); // false console.log(' \n\n\n' === 0); // false console.log(' ' === 0); // false不等于又是什么状况?
此次用不等于测试上面的例子: spa
console.log(99 != "99"); // false console.log(0 != false); // false console.log(' \n\n\n' != 0); // false console.log(' ' != 0); // false注意,每一个例子的最终结果都应该是真(true),但事实相反,由于受到了强制转换的影响。
若是改为双等运算符,将获得正确的结果: code
console.log(99 !== "99"); // true console.log(0 !== false); // true console.log(' \n\n\n' !== 0); // true console.log(' ' !== 0); // true总结
建议老是使用严格相等运算符,这将有助于你的代码保持数据完整性。 对象