说我有一些对象
> 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
错误可能会更好地替换为更有意义的反馈。
答案 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)
您可以使用try
,throw
和catch()
来确定这种情况。
以下是一个例子:
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);
}
在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所说的那样。无论如何,如果我需要使用下划线方法进行验证,我宁愿有更多的控制权。