繁体   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