実際に評価せずに、スニペットが有効な JavaScript であるかどうかをテストする関数はありますか? つまり、
function validate(code){
try { eval(code); }
catch(err) { return false; }
return true;
};
副作用なし。
実際に評価せずに、スニペットが有効な JavaScript であるかどうかをテストする関数はありますか? つまり、
function validate(code){
try { eval(code); }
catch(err) { return false; }
return true;
};
副作用なし。
はいあります。
new Function(code);
SyntaxError
コードが有効な Javascript でない場合にスローします。( ECMA-262、エディション 5.1、§15.3.2.1 は、解析できない場合に例外をスローすることを保証しますcode
)。
注意: このスニペットは、構文の有効性のみをチェックします。たとえば、未定義の参照が原因でコードが例外をスローすることがあります。コードを評価する (そしてそのすべての副作用を取得する) か、コードを解析してその実行をエミュレートする (つまり、JS で JS 仮想マシンを作成する) 必要があります。
esprimaを使用できます。
Esprima (esprima.org) は、ECMAScript (一般に JavaScript としても知られています) で記述された、高性能で標準に準拠した ECMAScript パーサーです。
特徴
- ECMAScript 5.1 (ECMA-262) の完全サポート
- Mozilla Parser AST と互換性のある実用的な構文ツリー形式
- 十分にテストされています (100% の確実なステートメント カバレッジを備えた 550 件を超える単体テスト)
- オプションの構文ノード位置の追跡 (インデックスベースおよび行 - 列)
- ES6/Harmony の実験的サポート (モジュール、クラス、分解など)
オンライン構文検証ツールを使用するか、 npm パッケージとしてインストールして、コマンド ラインからローカルで実行できます。と の 2 つのコマンドがありesparse
ますesvalidate
。esvalidate
得られます (上記のオンライン構文検証ツールの例を参照):
$ 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
完全を期すために、 ASTesparse
を生成します。