奇妙なケースのためにここにjsfiddleを作成しました:http://jsfiddle.net/YGcDR/
等式比較関数(おそらく最適化されていない)が、uglifyjsで最適化されたときに、select2ライブラリにバグを引き起こしているという考え方です。(バグを診断するのはかなり難しいです。https://github.com/ivaynberg/select2/issues/840に関連付けられたパッチで修正され、パッチが変更するのは比較コードだけです。私は本当にここで仮説を立てようとしています!)
同じ関数のパッチが適用されたバージョンは、最適化された場合と最適化されていない場合の両方で適切に動作するようです。
コードの「肉」は次のように行われる比較です:
if (a.constructor === String) return a === b + "";
if (b.constructor === String) return b === a + "";
vs
if (a.constructor === String) return a + "" === b + "";
if (b.constructor === String) return b + "" === a + "";
生成されるコードは、どちらの場合もわずかに異なります。
n.constructor===String?n===t+"":t.constructor===String?t===n+"":!1
vs
n.constructor===String?n+""==t+"":t.constructor===String?t+""==n+"":!1}
問題は、違いを引き起こす可能性のあるaとbのエントリのセットを考えることができないということです。最初は違いかもしれvar a = "Foo" and var b = new String("Foo")
ませんが、そうではないようです。なぜこれが失敗するのか見ている人はいますか?
ありがとう