我有一个具有参数 _parameter
的函数。理想情况下,我希望它能够包含一个或多个不同的 JSON 格式的值,而不需要它们都存在。我构建了一系列条件来检查这一点,下面是该集合中的一个片段,因为它(及其原型(prototype))抛出了下面的错误。 如何检查 _parameters["location"]["area"]
是否存在而不抛出错误并且不使用 try...catch
作为这会导致巨大的冗余?
我想使用的是下面的代码,或者一些变体,只要它仍然是一个三元语句:
this.area = typeof _parameters["location"]["area"] !== 'undefined' ? _parameters["location"]["area"] : this.location["area"];
对于咯咯笑,我也尝试了这些:
this.area = _parameters["location"]["area"] !== undefined ? _parameters["location"]["area"] : this.location["area"];
if(_parameters["location"]["area"]) {
alert(true);
} else {
alert(false);
}
但是,它们都返回以下错误并且从未见过 alert() 菜单:
"Uncaught TypeError: Cannot read property 'area' of undefined"
这会抛出同样的错误,但会优雅地解决:
try {
_parameters["location"]["area"];
} catch (e) {
alert(e);
}
编辑
为清楚起见,这里有一些 _parameter
可以包含的选项,以及我试图生成的结构的想法:
this.name = _parameters["name"] !== undefined ? _parameters["name"] : this.name;
this.gender = _parameters["gender"] !== undefined ? _parameters["gender"] : this.gender;
this.location = {
area : typeof _parameters["location"]["area"] !== 'undefined' ? _parameters["location"]["area"] : this.location["area"],
x : _parameters["location"]["x"] !== undefined ? _parameters["location"]["x"] : this.location["x"],
y : _parameters["location"]["y"] !== undefined ? _parameters["location"]["y"] : this.location["y"]
};
最佳答案
在检查区域
之前,您需要检查location
。试试这个:
this.area = _parameters["location"] && _parameters["location"]["area"] ? _parameters["location"]["area"] : this.location["area"];
您还应该能够使用点符号来访问您的属性:
this.area = _parameters.location && _parameters.location.area ? _parameters.location.area : this.location.area;
关于javascript - 条件变量存在,不存在时返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23840089/