我正在进行一些优化,并决定使用YUI Compressor压缩我的javascript文件。问题是,有些代码行末尾缺少“;”,因为javascript允许这样做,而开发人员并不太注意这个问题。
如果压缩代码会有问题吗?如果有问题,有没有办法检查缺少“;”的javascript代码行?
我正在进行一些优化,并决定使用YUI Compressor压缩我的javascript文件。问题是,有些代码行末尾缺少“;”,因为javascript允许这样做,而开发人员并不太注意这个问题。
如果压缩代码会有问题吗?如果有问题,有没有办法检查缺少“;”的javascript代码行?
jsLint 可以检查你的代码是否存在这些问题。如果压缩器实际上包含 JavaScript 解析器并积极修复缺少分号,那么它通常会引起问题。
return
是一个“受限制的产生式”(有 5 个这样的产生式) - 即使没有 ASI,完全相同的问题也将存在。以下是该问题的很好的解释,以及如何在一行可能继续表达式时编写安全的无分号代码:JavaScript 分号插入 - 你需要知道的一切。请参见底部的“误解”部分。 - user166390我对三个JavaScript压缩工具进行了简单的测试:Yuicompressor、Yuglify和Google Closure Compiler。在我的Ubuntu 12.10电脑上,我下载了每个压缩工具的二进制文件,并在每个压缩工具上测试了这个文件:
function dbz(){
var goku = 1
var vegeta = 2
var freeza = 3
console.log(goku + vegeta + freeza)
}
dbz()
以下是结果:
Yuicompressor (2.4.7):
function dbz(){var b=1;var c=2;var a=3;console.log(b+c+a)}dbz();
Yuglify (0.1.2):
function dbz(){var e=1,t=2,n=3;console.log(e+t+n)}dbz();
Closure-Compiler(版本20121212修订版2388):
function dbz(){console.log(6)}dbz();
虽然这只是一个非常简单的例子,但是所有没有分号的代码行都能正常工作。它们都可以检测出末尾没有分号的代码行,并添加上分号,然后删除换行符。
你可以使用正则表达式来匹配没有分号的换行符,并自然地对空行、)}等进行例外处理。
但说实话,如果它真的不能自动完成这种事情,那么它似乎真的是有问题的或者很糟糕。
use strict;
是否已经实现了这一点?)。 - ThiefMaster