javascript - 条件变量存在,不存在时返回错误

标签 javascript

我有一个具有参数 _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/

相关文章:

javascript - 事件监听器甚至在 Chrome 上也无法工作?

javascript - 如何修复 Angular 日期选择器过滤器

javascript - 使用 Dojo 构建工具时出现问题,尝试使用已编译脚本时出现 'could not load' 错误

javascript - 从右向左滚动时无法删除左侧的空白区域

javascript - 用于验证文本框的 Jquery 代码无法正常工作

javascript - 如何根据HTML表格创建excel文件并保存到项目目录中

javascript - 如何更新数组列表排序?

javascript - 为什么在 tabs.js 中使用 new 关键字

javascript - 按 HTML SELECT 对象过滤 Json 功能

javascript - 如何使用NPM模块?