[英]Is there a more concise way to write this without a bunch of IF statements?
[英]What is a concise and robust way to write these statements in JavaScript?
我有一个<iframe>,它使用在父文档的对象常量中设置的一些变量。 这些变量是可选的。 如果设置了它们,我想使用它们的值,将它们分配给一个更简洁的全局变量; 如果没有,我想调用函数error()。
首先,此三元运算符语句对我要执行的操作有效吗? 这里有潜在的陷阱吗?
parent.settings.account ? var account = parent.settings.account : error();
其次,有没有更简洁的方式来编写该声明?
这些变量中的一些是可选的,但如果定义,则具有一定范围的可接受值。 什么是处理此问题的可靠方法? 像这样吗
if (parent.settings.polling_interval && parent.settings.polling_interval >= 1000 && parent.settings.polling_interval <= 5000) {
var polling_interval = parent.settings.polling_interval;
} else {
var polling_interval = 3000; // default
}
基本上,如果未定义或超出范围,我想使用默认值。
我可以仅依赖以下条件语句:
if (parent.settings.polling_interval) { ... }
还是我需要检查它是否未定义?
if (typeof parent.settings.polling_interval !== 'undefined') { ... }
还有更健壮和/或更简洁的东西吗? 感谢您的任何建议。
这是错误的:
parent.settings.account ? var account = parent.settings.account : error();
您的意思是说:
var account = parent.settings.account ? parent.settings.account : error();
甚至:
var account = parent.settings.account || error();
var account = parent.settings.account;
if (!account)
error();
if ((p = parent.settings.polling_interval) && p >= 1000 && p <= 5000) {
...
}
var polling_interval = (p = parent.settings.polling_interval) && p >= 1000 && p <= 5000 ? p : 3000;
[1]
parent.settings.account ? ( var account = parent.settings.account ) : error();
这将引发SyntaxError,因为您不能以这种方式定义变量。
如果error()
引发异常/引发错误,则可以执行以下操作:
if ( !parent.settings.account ) {
error()
}
// continue code
如前所述,您还可以将变量分配给属性:
var account = parent.settings.account || error();
[2]
var pollingInterval = parent.settings.polling_interval &&
parent.settings.polling_interval >= 1000 &&
parent.settings.polling_interval <= 5000 ?
parent.settings.polling_interval : 3000;
[3]您可以使用if ( parent.foo )
,如果未定义foo
则不会抛出严格错误,但if ( parent.foo )
是始终定义parent,它将等于未定义。
如果定义了设置,但未定义polling_interval,则为相同情况。 如果确定属性已设置并且设置对象将存在,则可以使用
if ( parent.settings.polling_interval ) { }
这将有助于说明error()
实际作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.