0

我对 JS 在一个简单的 UNDEFINED 错误处停止有点恼火..

我有一个例程,我需要根据全局范围内的内容“设置”变量

targetID = myData.id;
targetID = myData.targetValue;

这些对象可能会或可能不会被设置,这取决于之前的操作......

我经常收到这个错误:

TypeError: myData is undefined
targetValue =  myData.targetValue;

其余的 JS 代码停止执行!

恼人的..

来自 PHP 和 AS2 以及其他语言,脚本永远不会停止在我身上,只是因为一个未定义的值..

现在我知道我可以在设置变量之前简单地测试“未定义”..但实际上我有一大堆变量要设置并在“每个”上运行一个条件有点愚蠢..

无论未定义的变量/对象如何,我如何告诉 JS 继续运行?

或者至少,我如何抑制特定于代码的错误(不是全球性的)..

在 php 中,在带有“@”符号的调用之前会抑制任何警告或错误。

4

2 回答 2

3

这里的问题不在于值是undefined. 问题是您试图访问 上的属性undefined,这会引发错误(它应该这样做)。

我不知道 PHP,但我无法想象当这样的事情发生时它不会抛出错误。

您可以采取以下措施来防止这种情况:

myData = myData || {};  // this will assure that myData is not undefined. That way the next call will not try to retrieve a property on undefined.
targetID = myData.id;
targetID = myData.targetValue;
于 2013-05-10T12:56:04.590 回答
2

使用守卫操作员。在尝试读取其属性之前检查对象是否存在。

targetID = myData && myData.id || "default value";

所以如果myData存在,那么会发生什么,然后使用myData.id,否则,使用这个"default value"

如果要对一组变量执行此操作,可以执行以下操作:

var targetId, targetValue;
if( myData ) {
    targetId = myData.id;
    targetValue = myData.value;
}
于 2013-05-10T12:53:36.360 回答