no-throw-literal

不允许将字面作为异常抛出

仅将 Error 对象本身或使用 Error 对象的对象作为用户定义异常的基础对象进行 throw 被认为是一种很好的做法。Error 对象的根本好处是它们会自动跟踪它们的构建和起源。

此规则限制了可以作为异常抛出的内容。当它第一次被创建时,它只阻止字面被抛出(因此得名),但现在它已经被扩展为只允许有可能成为 Error 对象的表达式。

规则详情

此规则旨在通过禁止抛出不可能是 Error 对象的字面和其他表达式来保持抛出异常时的一致性。

此规则的错误代码示例:

/*eslint no-throw-literal: "error"*/
/*eslint-env es6*/

throw "error";

throw 0;

throw undefined;

throw null;

var err = new Error();
throw "an " + err;
// err is recast to a string literal

var err = new Error();
throw `${err}`

L9CfmI+BHDwYx59RS77HEHanEO40ClscOusGIf+RQNhowUc7Zz7f+Hb0VCfK93W9

/*eslint no-throw-literal: "error"*/

throw new Error();

throw new Error("error");

var e = new Error("error");
throw e;

try {
    throw new Error("error");
} catch (e) {
    throw e;
}

已知限制

ESbnxcYhCccxb1l4SEamirSmTCuYr03cNu5V8Dp3QH24felhqvGses10H4tVUmdCz7IV2VjAQjrL99zOVSzblU2/JndBzUWmPMy6KucLLm5EKTnpkgBVPlesjTtNJlwVPDONDvYGQ2XvBl0ghkafDA==

L9CfmI+BHDwYx59RS77HEHanEO40ClscOusGIf+RQNinuD4tDJ0tJyo4eCGF9OmeJ8X2mvJrzb3i6lT8/+Jx+N7BXhUZ/dp/445E2bRbO0Y=

/*eslint no-throw-literal: "error"*/

var err = "error";
throw err;

function foo(bar) {
    console.log(bar);
}
throw foo("error");

throw new String("error");

var foo = {
    bar: "error"
};
throw foo.bar;