繁体   English   中英

用JavaScript编写这些语句的简洁而可靠的方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM