用自定义异常替换'undefined'

时间:2013-12-30 18:19:24

标签: javascript exception undefined

说我有一些对象

> var a = {'a': 1, 'b': 2}
undefined
> a.c
undefined

如果这个“未定义”属性c反而引发某种自定义错误,我希望如此。

是否有某种方法可以覆盖我的对象的默认行为,或者以某种方式调用它以便在查找返回undefined时提供回调?

我发现this question from a couple of years ago似乎与之相关。

我问,因为我认为通用TypeError: cannot call method 'foo' of undefined错误可能会更好地替换为更有意义的反馈。

4 个答案:

答案 0 :(得分:1)

您将以某种方式测试错误。覆盖它没有多大意义,特别是因为你只是让你的代码库变得更复杂,而且未定义实际上在这里是有意义的。属性c实际上是 undefined ,所以这是非常易读的(特别是对于使用您的代码的新人):

if (a.c) { //or could be a.c !== undefined, 
           //but if(a.c) will catch other falsey values
    a.c.something();
}

答案 1 :(得分:1)

您可以使用trythrowcatch()来确定这种情况。

以下是一个例子:

var a = {'a': 1,'b': 2};
try {
    if (a.c === undefined) throw "Sorry you need to create the property 'a.c first";
} catch (err) {
    console.log(err);
}

In JS Fiddle

throw成为传递给catch(err)的参数后,无论你放置什么字符串。所以,而不是说undefined它说Sorry you need to create the property 'a.c first

答案 2 :(得分:0)

如果您想获得更有意义的反馈,可以使用Firefox。

至少在第26版中,我得到了

TypeError: a.c is undefined

做的时候

var a = {};
a.c.foo(); // TypeError: a.c is undefined

答案 3 :(得分:0)

有一个名为underscore.js的js库,其方法如_.isUndefined(),_。isNull(),_。isEmpty()或_.isNan()在某些情况下可能对您有用。

但javascript捕获异常的方式就像Deryck所说的那样。无论如何,如果我需要使用下划线方法进行验证,我宁愿有更多的控制权。