查看Bootstrap的缩小和未缩小的JS文件中的第一行代码,存在直接的差异:
// bootstrap.js
if (typeof jQuery === 'undefined') { ... }
VS
// bootstrap.min.js
if("undefined"==typeof jQuery)...
(亲身体验:bootstrap.js和bootstrap.min.js)
我很困惑为什么这是允许的。我(或许天真)的理解是===
始终是性能提升,并且经常会阻止意外结果(例如,与0或""
进行虚假比较)。似乎文件大小的收益在性能上丢失,并且可能导致错误的结果。任何人都可以在这里光明吗?
答案 0 :(得分:5)
在您引用的特定代码中,它是安全的,因为两个操作数的类型都是不变的,并且都是字符串。没有可能的性能节省,因为永远不需要任何类型的强制。认为==
是这样的:
function ==(a, b) { // obviously this is fake
if (a === b) return true;
// type coercion ...
}
此外,我个人认为,由于语义的差异而不是因为性能,我应该使用===
而不是==
。像这样的微优化对大多数人编写的绝大多数代码都不重要。 (实际上有点讽刺的是,jQuery的存在检查是通过 oops错了:)typeof
比较来完成的;这本身就是一个有价值的微优化。)
答案 1 :(得分:0)
typeof
将始终返回一个字符串,因此无需担心类型转换。最终,这并没有在文件或执行中节省太多,但这被认为是一种安全的假设。