为什么Javascript minifiers将===转换为==?

时间:2014-05-07 18:07:53

标签: javascript minify

查看Bootstrap的缩小和未缩小的JS文件中的第一行代码,存在直接的差异:

// bootstrap.js
if (typeof jQuery === 'undefined') { ... }

VS

// bootstrap.min.js
if("undefined"==typeof jQuery)...

(亲身体验:bootstrap.jsbootstrap.min.js

我很困惑为什么这是允许的。我(或许天真)的理解是===始终是性能提升,并且经常会阻止意外结果(例如,与0或""进行虚假比较)。似乎文件大小的收益在性能上丢失,并且可能导致错误的结果。任何人都可以在这里光明吗?

2 个答案:

答案 0 :(得分:5)

在您引用的特定代码中,它是安全的,因为两个操作数的类型都是不变的,并且都是字符串。没有可能的性能节省,因为永远不需要任何类型的强制。认为==是这样的:

function ==(a, b) { // obviously this is fake
  if (a === b) return true;
  // type coercion ...
}

此外,我个人认为,由于语义的差异而不是因为性能,我应该使用===而不是==。像这样的微优化对大多数人编写的绝大多数代码都不重要。 (实际上有点讽刺的是,jQuery的存在检查是通过typeof比较来完成的;这本身就是一个有价值的微优化。) oops错了:)

答案 1 :(得分:0)

typeof将始终返回一个字符串,因此无需担心类型转换。最终,这并没有在文件或执行中节省太多,但这被认为是一种安全的假设。