簡體   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