在JavaScript类中抛出错误是否被认为是错误的做法?
我有一个如下所示的JavaScript类,需要控制输入变量的数据类型在JavaScript类中抛出错误是否被认为是错误的做法?,javascript,class,exception,ecmascript-6,Javascript,Class,Exception,Ecmascript 6,我有一个如下所示的JavaScript类,需要控制输入变量的数据类型 class Store { constructor (name) { if (typeof name !== "string") throw new Error("The first argument must be a string!"); createStore(name); } // [...] } 这被认为是一种不好的做法吗?
class Store
{
constructor (name)
{
if (typeof name !== "string")
throw new Error("The first argument must be a string!");
createStore(name);
}
// [...]
}
这被认为是一种不好的做法吗?有更好的解决方案吗?嗯,在某些情况下,实际上最好不要抛出错误。 假设您有一个返回承诺的方法。在这种情况下,您最好拒绝它,以便使用
.catch
捕获它
class Example {
test(name) {
return new Promise( (resolve, reject) => {
if (typeof name !== "string")
reject("The first argument must be a string!")
else
resolve()
})
}
}
let ex = new Example()
ex.test(['array']).then( () => {
console.log('We successfully passed a string!')
}).catch( err => {
console.error(err)
})
为什么这不是一个好的做法?快速失败是好的。这取决于您对此
存储的意图。是否要中断类型检查器的整个控制流?在我看来,返回错误并让用户决定如何处理它可能是有意义的。或者,您可以查看Flow
,这是一个在函数args:@BobbyMatson中强制执行静态类型的库-您不能轻易地从构造函数返回错误,因为构造函数返回了对象。您可以返回null
,并要求所有代码检查该值,但异常非常适合此用途。对于在开发过程中犯错误的程序员来说,异常往往比仅仅返回一个可能没有被检查的错误代码要明显得多。99%的情况下,这种类型的错误是编程错误,而不是代码编写正确的运行时错误,因此您希望错误立即出现在开发人员面前,以便他们能够修复代码。同意!我完全没有意识到这是在构造器中——这完全有道理。作为一名开发人员,我希望newstore(123)
会抛出一个错误