检查代码是否是有效的JavaScript,而不实际评估它
是否有一个函数可以测试代码段是否是有效的JavaScript,而不实际评估它?也就是说,相当于检查代码是否是有效的JavaScript,而不实际评估它,javascript,compilation,eval,Javascript,Compilation,Eval,是否有一个函数可以测试代码段是否是有效的JavaScript,而不实际评估它?也就是说,相当于 function validate(code){ try { eval(code); } catch(err) { return false; } return true; }; 没有副作用。是的,有 new Function(code); 如果代码不是有效的Javascript,则抛出一个语法错误。(保证如果code不可解析,它将抛出异常) 注意:此代码段仅检查语法有效
function validate(code){
try { eval(code); }
catch(err) { return false; }
return true;
};
没有副作用。是的,有
new Function(code);
如果代码不是有效的Javascript,则抛出一个语法错误。(保证如果code
不可解析,它将抛出异常)
注意:此代码段仅检查语法有效性。例如,由于未定义的引用,代码仍然可以抛出异常。这是一种更难检查的方法:要么评估代码(并获得其所有副作用),要么解析代码并模拟其执行(即用JS编写JS虚拟机)。您可以使用
Esprima(Esprima.org)是一个高性能、标准兼容的ECMAScript解析器,用ECMAScript(也称为JavaScript)编写
特征
- 完全支持ECMAScript 5.1(ECMA-262)
- 合理的语法树格式,与Mozilla解析器AST兼容
- 经过大量测试(>550个单元测试,100%的陈述覆盖率)
- 可选跟踪语法节点位置(基于索引和行列)
- 对ES6/Harmony的实验支持(模块、类、分解等)
esparse
和esvalidate
esvalidate
yields(给出上述在线语法验证器的示例):
为了完整起见,
esparse
生成了一个。Javascript不是一种编译语言。Javascript的编译量太高了@Dokkat,您错过了一个位置。如果出现语法错误,新函数(code)
将抛出。当然,如果不实际执行代码,就无法检测引用错误。@Dokkat和
$ 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