![](/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.