簡體   English   中英

檢查代碼是否是有效的JavaScript而不實際評估它

[英]Checking if code is valid JavaScript without actually evaluating it

是否有一個函數來測試片段是否是有效的JavaScript而沒有實際評估它? 也就是說,相當於

function validate(code){
    try { eval(code); } 
    catch(err) { return false; }
    return true;
};

沒有副作用。

就在這里。

new Function(code);

如果代碼無效Javascript,則拋出SyntaxError ECMA-262,版本5.1,§15.3.2.1保證如果code不可解析,它將拋出異常)。

注意 :此代碼段僅檢查語法有效性。 例如,由於未定義的引用,代碼仍然可以拋出異常。 檢查它是一種更難的方法:您要么應該評估代碼(並獲得所有副作用),要么解析代碼並模擬其執行(即在JS中編寫JS虛擬機)。

你可以使用esprima

Esprima(esprima.org)是一個高性能,符合標准的ECMAScript解析器,用ECMAScript(也稱為JavaScript)編寫。

特征

  • 完全支持ECMAScript 5.1(ECMA-262)
  • 合理的語法樹格式,與Mozilla Parser AST兼容
  • 經過大量測試(> 550次單元測試,固態100%聲明覆蓋率)
  • 語法節點位置的可選跟蹤(基於索引和行列)
  • ES6 / Harmony的實驗支持(模塊,類,解構......)

您可以使用在線語法驗證程序或將其安裝為npm包,並從命令行在本地運行它。 有兩個命令: esparseesvalidate esvalidate yield(給出上面在線語法驗證器的示例):

$ esvalidate foo.js 
foo.js:1: Illegal return statement
foo.js:7: Octal literals are not allowed in strict mode.
foo.js:10: Duplicate data property in object literal not allowed in strict mode
foo.js:10: Strict mode code may not include a with statement

為了完整起見, esparse產生AST

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM