3

誰かがこれらの式の結果を説明できますか?

  [1, 2, 4] < [1, 2, 5]  // true
  [1, 3, 4] < [1, 2, 5]  // false


  [1, 2, 3] === [1, 2, 3]   // false
  [1, 2, 3] <   [1, 2, 3]   // false
  [1, 2, 3] ==  [1, 2, 3]   // false
  [1, 2, 3] >   [1, 2, 3]   // false


  [1, 2, 3] <= [1, 2, 3]   // true
  [1, 2, 3] >= [1, 2, 3]   // true

助けてくれてありがとう!

4

4 に答える 4

4

平等=

[1, 2, 3] == [1, 2, 3]

抽象等価比較アルゴリズムで説明されており、基本的には次のように述べています

(if x or y are primitives, compare them, otherwise...)
Return true if x and y refer to the same object. Otherwise, return false.

異なるオブジェクト リテラルは常に異なるオブジェクトを表すため、内容が同じであっても、上記の比較は失敗します。

関係演算子 < >

相対比較は、等式とは異なります。<またはを使用すると、配列は文字列>として比較されます。

[1, 2, 4] < [1, 2, 5] 

抽象リレーショナル比較アルゴリズムは、両方のオペランドをプリミティブに変換します。オペランドがオブジェクトの場合、は をToPrimitive呼び出しますが、[[DefaultValue]]これは と同じobj.valueOf().toString()です。オブジェクトはオブジェクト自体であるためvalueOf、全体は次のように要約されます。

"1,2,4" < "1,2,5"

配列が要素ごとに比較されるという一般的な仮定は正しくありません。

[10,1,3] < [101,5]  // false

valueOf関係演算子の動作に影響を与えるためにオーバーライドできることに注意してください。

> a = [1,2,3]
[1, 2, 3]
> a < [1,2,4]
true
> a.valueOf = function() { return 'zzz' }
function () { return 'zzz' }
> a < [1,2,4]
false
于 2013-05-15T14:04:33.490 に答える