![](/img/trans.png)
[英]In JavaScript, can I check to see if a string can be evaluated without actually evaluating it?
[英]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包,並從命令行在本地運行它。 有兩個命令: esparse
和esvalidate
。 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.