2012-11-02 30 views
0

我經常發現我編寫的IF語句可以立即引用條件語句的值。舉例來說,假設我需要檢查,看是否有字符串模式匹配:引用Javascript IF聲明中的始發條件值

if (mystring.match(/mypattern/) { 
    var mymatch = mystring.match(/mypattern/)[1]; 
    ... 
}; 

我懷疑什麼,我正在尋找不存在的,但我想知道您是否可以參考條件語句的值在if塊中,你可以在函數中引用「參數」的方式。在許多情況下,當然,我可以把它改寫這樣的:

var mymatch = mystring.match(/mypattern/)[1]; 
if (mymatch) { ... }; 

但是,這往往是不可能的,如果有一個名爲一系列的方法。例如:

var mymatch = $('.myclass')[0].text().match(/mypattern/)[1]; 

...如果沒有要調用.text()的項目[0],則會拋出異常。有一些方便的速記我錯過了嗎?還是更好的組織方式?只是好奇,真的 - 如果答案是否定的,我會繼續生活。

+0

沒有明確的解決方案。你可以使用** try catch **塊,或者你需要檢查你的數組長度。 – Damask

回答

1

在案件有關,你可以使用賦值運算符返回在JavaScript中的值,所以比如,你可以寫東西喜歡這樣的事實:

if (assignedTest = testedValue) { 
    //value of assignedTest is now available 
    //and conditional will only be executed if true 

這可以被使用,如果在RHS是兼容或正常設置但是這也是一個巨大的可讀性問題,因爲它很容易將作業=與比較==/===混淆。

如果你特別希望追求這一點,你可以將這種功能提取到一個可靠的函數中:例如將一個閉包的結果分配給一個命名變量,並且你可以進一步調整行爲做其他事情(比如可選擇評估測試中的不同值)。最終它將主要是使一個簡單的結構更復雜。

+0

謝謝,馬特。我從來沒有考慮過賦值返回賦值。我會記住你的可讀性警告,但是因爲我目前的項目是個人的事情,所以我可以放棄一些特質。 – Semicolon