Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Javascript缩略器将===转换为==?_Javascript_Minify - Fatal编程技术网

为什么Javascript缩略器将===转换为==?

为什么Javascript缩略器将===转换为==?,javascript,minify,Javascript,Minify,在Bootstrap的精简JS文件和未精简JS文件的第一行代码之间,有一个直接的差异: // bootstrap.js if (typeof jQuery === 'undefined') { ... } vs (自己看:和) 我不明白为什么这是允许的。我(也许是天真的)理解是,==始终是一种性能增益,并且经常防止意外结果(例如,与0或“”的错误比较)。文件大小方面的微小改进似乎在性能和错误结果的可能性方面都有所损失。有人能解释一下吗?在您引用的特定代码中,这是安全的,因为两个操作数的类型都是

在Bootstrap的精简JS文件和未精简JS文件的第一行代码之间,有一个直接的差异:

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

(自己看:和)


我不明白为什么这是允许的。我(也许是天真的)理解是,
==
始终是一种性能增益,并且经常防止意外结果(例如,与0或
”的错误比较)。文件大小方面的微小改进似乎在性能和错误结果的可能性方面都有所损失。有人能解释一下吗?

在您引用的特定代码中,这是安全的,因为两个操作数的类型都是不变的,并且都是字符串。因为不需要任何类型的强制,所以不可能节省性能。把
==
想象成这样:

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

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

typeof
总是会返回一个字符串,因此不必担心类型转换。最终,这不会在文件或其执行中节省太多,但这被认为是一个安全的假设。

typeof
总是返回一个字符串,因此
==
是不必要的。运行该文件的minifier或其他处理器可能已经识别出这一点。不存在错误结果的可能性,即使这一行的运行频率足以成为瓶颈,任何性能差异都会被忽略。每个人都在回答问题时没有完全理解问题。@NickDugger,这不是真的;问题很清楚。
==
的性能优势仅在操作数不是同一类型时才相关。它转换所有实例,还是仅转换类型安全实例?@NickDugger人们缺少什么?通常最好提供错误的详细信息,或者提供自己更正确的答案。回答得好!我只是想向可能在阅读伪代码时遇到困难的其他人澄清,
//类型强制
是事实上的
其他
,而不是对上面发生的事情的描述。@Impirator哦,是的,说得好。我这样写是为了强调,如果在
==
比较规则下,值相等,那么工作就完成了。
function ==(a, b) { // obviously this is fake
  if (a === b) return true;
  // type coercion ...
}