Javascript 在未定义属性之前处理它们';失败';
如果可能的话,我希望在对象失败/返回未定义的属性和/或标识符之前处理它们 是否有一种简洁的方法可以捕获对未定义属性的访问并在不使用try/catch的情况下处理它Javascript 在未定义属性之前处理它们';失败';,javascript,event-handling,Javascript,Event Handling,如果可能的话,我希望在对象失败/返回未定义的属性和/或标识符之前处理它们 是否有一种简洁的方法可以捕获对未定义属性的访问并在不使用try/catch的情况下处理它 var myObj = { myVar : 10, myFunc : function(){console.log('foo') } myObj.myVar; myObj.myFunc(); var x = "myFunc"; myObj[x]; x = "myOtherFunc"; // Handle this
var myObj = {
myVar : 10,
myFunc : function(){console.log('foo')
}
myObj.myVar;
myObj.myFunc();
var x = "myFunc";
myObj[x];
x = "myOtherFunc";
// Handle this in an eventhandler or similar before it fails!?!?
myObj[x];
我不能从我的位置更改呼叫代码。我只能更改myObj内部的代码,因为它是其他人使用的模块。试试这个:
try {
myObj.myOtherFunc();
} catch() {
}
myObj.myOtherFunc() || ""; //default value;
myObj.myOtherFunc() || myObj.myDefinedFunc(); //default value;
if (var t = myObj.myOtherFunc())
// something
else
// something else
if(myObj.hasOwnProperty(x)) {
myObj[x];
}
到底什么失败了?您可以从对象获取未定义的属性,而不会出现错误--
console.log({}.foo)//undefined
。如果您需要使用该值,您可以先查看它是否存在:If(myObj中的x)myObj[x]…
。不,javascript中没有类似的东西,请跟踪您拥有的内容,您应该会很好。@JonathanLonowski,我无法在myObj之外修改代码,因此我无法在调用myObj之前检查myObj中是否存在x。编辑问题以解释为什么您的答案不适用于我的案例。一般来说,这个问题的答案是公平的。谢谢你的回答,但是,这对我来说不起作用,因为我不能更改呼叫代码。我只能更改myObj内部的代码