细说 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
new String('foo') === 'foo'; // false
new Number(10) === 10;       // false
var foo = {};
foo === foo;                 // true

在这儿,不再仅仅是比较两个值是不是相称,它将推断两个值是不是援用同一个对象实例,这个行动比较像 C 中的指针。

总结

这里强烈建议只运用严厉相称标记 ===。假如我们需要做范例转换,能够在比较前先做显式的范例转换,而不是靠 Javascript 自身庞杂的强迫转换要领。

@justjavac 先辈所提的这个题目越发详述地剖析了 Javascript 中的比较。

《详解一下 javascript 中的比较》

参考

http://bonsaiden.github.io/JavaScript-Garden/#types.equality

    原文作者:StephenLee
    原文地址: https://segmentfault.com/a/1190000000503342
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞