《javascript高級程序設計》筆記:關係運算符與相等運算符

關係運算符

關係運算符有小於(<)、大於(>)、小於等於(<=)和大於等於(>=)四種,它們都返回一個布爾值javascript

《javascript高級程序設計》書中的規則是這樣描述運算規則:java

(1)若是兩個操做數都是數值,則執行數值比較;
(2)若是兩個操做數都是字符串,則比較兩個字符串對應的字符編碼值;
(3)若是一個操做數是數值,則將另外一個操做數轉換爲一個數值,而後執行數值比較;
(4)若是一個操做數是對象,則調用這個對象的 valueOf()方法,用獲得的結果按照前面> 的規則執行比較,若是對象沒有 valueOf()方法,則調用 toString()方法,並用獲得的結果根據前面的規則執行比較;
(5)若是一個操做數是布爾值,則先將其轉換爲數值,而後再執行比較。

關係運算圖譜:
圖片描述編碼

==> 圖譜分析:
(1)undefined本質是NaN,任何操做數與 NaN 進行關係比較,結果都是 false
(2)null本質是0,boolean本質是0或1
(3)若是兩個操做數都是字符串,則比較兩個字符串對應的字符編碼值(a-97,A-65, 0-48);
(4)object可能隱式轉換成numbe或者string,視狀況而定spa

"Brick" < "alphabet"; // true
"23" < "3"; // true
"23" < 3; //false
"a" < 3; // false,由於"a"被轉換成了 NaN

undefined < 1; // false,由於undefined會被轉換成NaN
undefined > 1; // false
null < 1; // true,由於undefined會被轉換成0

相等操做符

相等操做符有兩組:相等和不相等—先轉換再比較,全等和不全等—僅比較而不轉換設計

== 和 != 兩個操做符都會先轉換操做數(一般稱爲強制轉型),而後再比較它們的相等性code

《javascript高級程序設計》書中的規則是這樣描述運算規則:對象

(1)若是有一個操做數是布爾值,則在比較相等性以前先將其轉換爲數值—false 轉換爲 0,而true 轉換爲 1;
(2)若是一個操做數是字符串,另外一個操做數是數值,在比較相等性以前先將字符串轉換爲數值;
(3)若是一個操做數是對象,另外一個操做數不是,則調用對象的 valueOf()方法,用獲得的基本類型值按照前面的規則進行比較;

這兩個操做符在進行比較時則要遵循下列規則。
(4)null 和 undefined 是相等的。
(5)要比較相等性以前,不能將 null 和 undefined 轉換成其餘任何值。
(6)若是有一個操做數是 NaN,則相等操做符返回 false,而不相等操做符返回 true。重要提示:即便兩個操做數都是 NaN,相等操做符也返回 false;由於按照規則,NaN 不等於 NaN。
(7)若是兩個操做數都是對象,則比較它們是否是同一個對象。若是兩個操做數都指向同一個對象,則相等操做符返回 true;不然,返回 false。

相等運算圖譜:
圖片描述blog

==> 圖譜分析:
(1)null 和 undefined 是相等且不能將 null 和 undefined 轉換成其餘任何值
(2)對象是否相等由其指向決定
(3)boolean的本質依然是0和1,字符串和數值的比較要轉成數值圖片

null == undefined; // true
"NaN" == NaN; // false
5 == NaN; // false
NaN == NaN; // false
NaN != NaN; // true
false == 0; // true
true == 1; // true
true == 2; // false
undefined == 0; // false
null == 0; // false
"5" == 5; //true

=== 和 !== 兩個操做符不會進行類型轉換直接比較相等性ip

建議:在知曉變量類型的狀況下使用全等和不全等進行判別

相關文章
相關標籤/搜索