2013-05-18 43 views
2

我想檢查一下這個元素是否存在,其中一個方法是否爲空?除了這個未定義的方法,你會怎麼樣

請看看下面的代碼:

     
var description;   
var desc = forecasts[i].getElementsByTagName('desc')[0] 
if (desc != null || desc.textContent == "") { 
    description = desc.textContent 
} 

所以基本上如果元素沒有定義它給了我一個錯誤:

Uncaught TypeError: Cannot read property 'textContent' of undefined

好吧,我可以使用嵌套ifs ,但我認爲這個問題應該有一個更加有效的解決方案。

回答

3

你的條件是錯誤的:

desc != null || desc.textContent == "" 

因爲undefined != null評估爲false,病情會再嘗試訪問desc.textContent

看來你想複製的內容,如果它存在,而不是空的;這可以用下面的條件來完成:

var description, 
desc = forecasts[i].getElementsByTagName('desc')[0]; 

if (desc && desc.textContent.length) { 
    description = desc.textContent; 
} 
+2

其實undefined == null是真的。試試看...只有undefined === null是錯誤的。問題出在你的答案 – MofX

+0

@MofX你「修復」或運營商感謝您發現,我的意思是說它評估爲'虛假',但我忘了把它放在我的答案:) –

+0

似乎最好的答案,謝謝 –

1
var description;   
var desc = forecasts[i].getElementsByTagName('desc')[0] 
if (desc && desc.textContent) { 
    description = desc.textContent 
} 

var string = ""; if (string)計算爲false在JavaScript這樣你就可以直接刪除平等檢查,確保desc.textContent計算結果不是假的。

如果desc存在但您還應該刪除OR運算符,但desc.textContent不會繼續並且得到desc.textContent。用AND運算符if (desc && desc.textContent)替換您的OR語句。

示例:​​- 請注意,有3條if語句,但只有一條評估爲true。

+0

'desc.textContent'實際上會導致錯誤,因爲在這種情況下'desc'沒有被定義。 –

+0

@Jack我看到只是測試這個,我已經更新了我的答案。 –

+0

該代碼現在是正確的,但答案的其餘部分似乎沒有涉及到它。 –

相關問題