2016-02-11 123 views
-1

我很驚訝地發現兩個數組的比較在JavaScript中返回一個布爾值。比較運算符在javascript中的數組上比較什麼?

var blah = [1,2,3]; 
 
var blah2 = [2,3,4,5]; 
 

 
document.write(blah < blah2);

我老老實實期待的NaN,但在每一個瀏覽器我測試我得到了一致的「真」的結果。我找不到比較操作符在JS中使用數組的任何文檔。在這種情況下正在比較什麼?

+3

的陣列被強制爲字符串值,這實際上是說'。加入()'被調用,結果是相比較。 – Pointy

+2

您是否期望* NaN *是不及運算符的結果?所以你認爲像* 42這樣的事情是NaN比666 *? –

+0

比較運算符永遠不會返回'NaN',它們總是返回一個布爾值。 'NaN Barmar

回答

0

我老老實實期待的NaN

號的比較總是返回一個JavaScript布爾(當它不拋出異常)。
如果任何一個操作數是沒有可比性(如NaN),它將返回false

什麼是在這種情況下進行比較?

abstract relation comparison algorithm將所有參數轉換爲原始值以進行比較。在你的陣列的情況下,這將它們轉換爲字符串,所以你基本上比較

"1,2,3" < "2,3,4,5" 
+0

雖然它返回'FALSE'當我嘗試將其與'NaN'參數,規格說,它應該返回'未定義'在這種情況下。 – Barmar

+0

@Barmar:抽象算法返回'undefined',使得實際操作者可以隨時返回'FALSE'(不管它是否是'<', '<=', '>'或'> ='調用該算法) – Bergi