2013-03-28 95 views
6

我有一些大組不同的JavaScript片段(幾千)的,其中一些有語法一些愚蠢的錯誤(如不匹配括號/引號,裏面的JavaScript的HTML,在可變錯別字名)。簡單的檢查/驗證JavaScript語法

我需要一個簡單的方法來檢查JS語法。我試過JSLint,但它發送了太多關於樣式,變量定義的方式等方面的警告(即使我關閉所有標誌)。我不需要找出樣式問題,或者提高javascript質量,我只需要找到明顯的語法錯誤。當然,我可以簡單地在瀏覽器/瀏覽器控制檯中檢查它,但是我需要自動執行該操作,因爲該代碼段的數量很大。

地址:
的JSLint/JSHint報道了很多的不屬於「美」,但工作線的問題(即有一定的潛在問題),並不能看到真正問題,普通編譯器只會報告語法錯誤並停止執行。例如,嘗試使用JSLint代碼,該代碼在第4行(不匹配的引號),第6行(需要逗號)和第9行(意外的<腳本>)上具有語法錯誤。

document.write('something'); 
a = 0; 
if (window.location == 'http://google.com') a = 1; 
document.write("aaa='andh"+a+"eded"'); 
a = { 
    something: ['a'] 
    something2: ['a'] 
}; 
<script> 
a = 1; 
+2

試試這個http://www.javascriptlint。com/ – 2013-03-29 11:18:10

+0

嗯......謝謝,我會盡力的。我認爲這是JSLint的一些克隆,但它工作的不同。 – mvf 2013-03-29 11:35:09

回答

1

我發現SpiderMonkey的具有編譯腳本但不執行能力,如果編譯失敗 - 它打印錯誤。

,所以我只是創造了小包裝的SpiderMonkey的

sub checkjs { 
    my $js = shift; 
    my ($js_fh, $js_tmpfile) = File::Temp::tempfile('XXXXXXXXXXXX', EXLOCK => 0, UNLINK => 1, TMPDIR => 1); 
    $| = 1; 
    print $js_fh $js; 
    close $js_fh; 
    return qx(js -C -f $js_tmpfile 2>&1); 
} 

而且javascriptlint.com在我的情況還涉及非常好。 (感謝@rajeshkakawat)。

+0

我認爲存在的問題是,他不感興趣,而不是它是否編譯,例如(SpiderMonkey [插入分號](http://inimino.org/~inimino/blog/javascript_semicolons)),當然它doesn你不需要聲明變量,對嗎?),但有興趣找到一些邏輯上雖然不是編譯錯誤(如var name typos),但JSLint尤其擅長捕捉。 – ruffin 2013-03-28 20:58:59

+0

JSLint不適合語法檢查,它報告一些小問題,但沒有看到非常糟糕和危險的事情。試試這個:document.write('something'); a = 0; if(window.location =='http://google.com')a = 1; document.write(「aaa ='andh」+ a +「eded」'); a = { something:['a'] something2:['a'] };

2

你可以嘗試JSHint,這是不太詳細。

+1

看起來很像JSLint。 – mvf 2013-03-28 11:30:04

-1

語義設計(我公司)的JavaScript格式讀取JS文件,並將它們格式化。你不需要格式化部分。

要讀它會格式化文件,它使用一個完整的JavaScript語法分析器,它做了完整的語法檢查(甚至裏面的正則表達式)。如果你運行它並簡單地忽略格式化的結果,你會得到一個語法檢查器。

你可以給它一個大的文件列表,它會格式化所有的文件。你可以用它來批量檢查你的大集合。 (如果有任何語法錯誤,它會向shell返回一個非零錯誤狀態)。

+0

1)忘了說。平臺是Linux,首選免費軟件工具。 2)您的網站認爲只有一個平臺存在,並且很難發現您的軟件在Windows上運行 – mvf 2013-03-29 11:26:27

+0

1.難以提供您最初未提供的要求的答案。 2)不那麼難,請參閱購買頁面鏈接。 3)討論Wine在Linux下運行的軟件,它運行得很好。 – 2017-07-13 03:03:42

0

如果您有詳盡的JSLint錯誤列表想要捕獲的很多選項。

的JSLint的代碼實際上是相當不錯的,很容易理解(我假設你已經知道了JavaScript的相當不錯,從你的問題)。你可以破解它只檢查你想要的,並繼續,無論它發現多少錯誤。

您也可以在Node.js的迅速寫的東西用的JSLint的,是檢查每一個文件/快速片斷和輸出只有那些你所關心的錯誤。

+0

看到我的添加在初始文章。 – mvf 2013-03-29 10:59:29

1

萬一有人還在尋找你可以嘗試Esprima

只檢查語法,沒有別的。