我有一个参数_parameter
的函数。理想情况下,我希望它能够包含一个或多个不同的JSON格式值,而不需要它们全部存在。我构建了一系列条件来检查这个,下面是集合中的一个片段,因为这个(及其原型)抛出了下面的错误。 如何查看_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"]
};
答案 0 :(得分:2)
应该能够通过简单检查为它添加前缀,以查看是否设置了_parameters["location"]
。
this.area = (_parameters["location"] && typeof _parameters["location"]["area"] !== 'undefined') ? _parameters["location"]["area"] : this.location["area"];
虽然这可以缩短为:
this.area = (_parameters["location"] && _parameters["location"]["area"]) ? _parameters["location"]["area"] : this.location["area"];
由于undefined
属性在条件数中评估为false
。
答案 1 :(得分:2)
在检查location
之前,您需要检查area
。试试这个:
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;