2

我在这里为一个奇怪的案例创建了一个 jsfiddle:http: //jsfiddle.net/YGcDR/

这个想法是,当使用 uglifyjs 进行优化时,相等比较函数(可能未优化)会导致 select2 库中的错误。(这个bug很难诊断,我们只知道与https://github.com/ivaynberg/select2/issues/840相关的补丁修复了它,补丁唯一改变的是比较代码。所以我'我真的想在这里形成一个假设!)

在优化和未优化的情况下,相同功能的修补版本似乎表现正常。

代码的“肉”是这样完成的:

if (a.constructor === String) return a === b + "";
if (b.constructor === String) return b === a + "";

对比

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

对比

n.constructor===String?n+""==t+"":t.constructor===String?t+""==n+"":!1}

问题是,我想不出任何可能导致差异的 a 和 b 条目集。起初我虽然这可能是 之间的差异var a = "Foo" and var b = new String("Foo"),但似乎并非如此。有人知道为什么这会失败吗?

谢谢

4

0 回答 0