2013-11-26 41 views
3

對於<算子,當它適用於兩個字符串,兩個數字和兩個布爾值時,它似乎很容易理解。不同類型的比較規則是什麼(< and >)?

我的問題有兩個部分:

什麼是規則,當我們用它來比較兩個對象?

看來我不能寫{} < {},但下面的代碼生成了false

var a = {}; 
var b = {}; 
console.log(a < b); //false 

什麼是規則,當我們用它來比較兩個不同的類型?

true < "" //false 
true > "" //true 
10 < true //false 
10 < "" //false 

我不知道爲什麼結果是這樣的。我發現an article on comparison in JavaScript但沒有任何細節。

順便說一句,我不知道如何=====工作。

+0

你應該看看Rhino的書籍JavaScript:The Definitive Guide(http://shop.oreilly.com/product/9780596805531.do)。這對JavaScript中的類型轉換和比較有很好的解釋。 – Jason

回答

1

當我們用它來比較兩個對象時,規則是什麼?

wikipedia

當比較它們的對象,他們被認爲是 不同,如果他們的目標是不一樣的物體,即使值他們的 是相同的,所以變量:

var obj1 = {a: 1}; 
var obj2 = {a: 1}; 
var obj3 = obj1; 
alert(obj1 == obj2); //false 
alert(obj3 == obj1); //true 

當我們用它來比較兩種不同類型的規則是什麼?

這是您發佈的文章中,我從中引述中解釋:如果兩個操作數是相同類型的不

,JavaScript的轉換 操作數,則實行嚴格的比較。如果任一操作數是 數字或布爾值,則操作數將轉換爲數字(如果 可能;否則,如果任一操作數是一個字符串,則字符串操作數是 轉換爲數字,如果可能的話。如果兩個操作數都是對象,則當操作數 引用內存中的同一對象時,JavaScript比較內部引用相等。

1

有該文章中有很多的細節信息:

如果兩個操作數不屬於同一類型,JavaScript的轉換操作數,則實行嚴格的比較。

  1. 如果操作數是一個號碼或一個布爾,操作數被 轉換爲數字如果可能
  2. 如果一個操作數是一個,字符串的操作數是 轉換爲數字如果可能
  3. 如果兩個操作數都對象,然後JavaScript的比較內部 引用時操作數指代相同的對象中 存儲器它們是相等的。

所以,數字,布爾和字符串:

false == 0 == "" 
true == 1 == "1" != "any other string (including empty)" 
1

什麼是規則,當我們用它來比較兩個對象?

對於<>(和<=>=)比較,JavaScript引擎調用valueOftoString在物體上的方法,如果有的話,檢查更大/更小。在這個例子中:

var a = {}; 
var b = {}; 
console.log(a < b); 

的JavaScript測試以下條件並返回false:

"[object Object]" < "[object Object]" // false 

什麼是規則,當我們用它來比較兩個不同的類型?

規則相同as those used for == operator

0

對象在比較之前轉換爲字符串。

相關問題