![](/img/trans.png)
[英]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.