我在这里为一个奇怪的案例创建了一个jsfiddle:http://jsfiddle.net/YGcDR/
这个想法是,当用uglifyjs优化时,相等比较函数(可能没有优化)会导致select2库中的错误。 (这个bug很难诊断,我们都知道与https://github.com/ivaynberg/select2/issues/840相关联的补丁修复了它,而且patche改变的唯一内容就是比较代码。所以我真的想在这里形成一个假设! )
同一功能的修补版本似乎表现正常,无论是优化还是未优化的情况。
代码的“肉”是这样的比较:
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")
之间的差异,但似乎并非如此。谁知道为什么这会失败?
由于