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

Imp*_*tor 6 javascript minify

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

// bootstrap.js
if (typeof jQuery === 'undefined') { ... }
Run Code Online (Sandbox Code Playgroud)

// bootstrap.min.js
if("undefined"==typeof jQuery)...
Run Code Online (Sandbox Code Playgroud)

(亲自看看:bootstrap.jsbootstrap.min.js)

我很困惑为什么这是允许的.我的(可能是天真的)理解是,===它始终是一种性能提升,并且通常可以防止出现意外结果(""例如,与0比较的虚假比较).似乎文件大小的收益在性能上丢失,并且可能导致错误的结果.有人能在这里光明吗?

Poi*_*nty 5

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

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

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