2013-06-19 64 views
3

這不是一個實際問題,我只是需要一個解釋。在JavaScript中未定義的類型?

我有以下代碼:

var src = container.find('img').attr('src'); 
if(src === 'undefined') { 
    alert('No src'); 
} 

當我火了控制檯和記錄它說,這是不確定的,但警報未開的SRC。調試這段代碼證明了以前的行爲。當我刪除if語句中的''並將未定義的類型作爲類型時,會觸發警報。

在另一方面,進一步降低我的代碼,我有這片:

var pathname = (window.location.pathname).split('/'); 
if(pathname[5] === 'undefined') { 
    alert('Something...'); 
} 

每當控制檯說,路徑[5]是不確定的警報被觸發正確。

因此,我認爲在第一種情況下,undefined返回爲類型,第二種情況返回爲字符串。這是正確的,爲什麼這樣的行爲?

感謝您的所有智能答案!

+2

' 「未定義」 == undefined' – elclanrs

+1

只是如果(typeof運算SRC === '未定義')和它將被完成 –

+0

undefined是一個類型而不是值... ===比較值和類型和!==說它在值或類型上不相等..不要與值混淆......你應該專注於操作員... ==比較值===比較值和類型 – AlvinArulselvan

回答

1

您需要知道===運算符它不僅檢查值,還檢查變量的數據類型。

因此,在第一種情況下,它不會變爲true,因爲在javascript中undefined不是字符串。

所以嘗試:

if(src === undefined) { 
    alert('No src'); 
} 

在第二種情況下,仍返回false。 Here is JsFiddle Demo

試試這個:

var loc="/~svemirko/dreamhouse/admin/homepage/"; 
var pathname = (loc).split('/'); 

if(pathname[7] === undefined) { 
    alert('Something...'); 
} 
+1

是的,我知道那我選擇默認使用嚴格的比較,並繼續在這種情況下的做法。我只是好奇,爲什麼在第一個例子undefined返回作爲一種類型和第二個作爲一個字符串(如果這是這裏的情況)。 – Svemirko

+0

是的,你在這裏是正確的,但爲什麼這樣的行爲?!?!?這只是我考慮這個瘋狂嗎? – Svemirko

+0

「/〜svemirko/dreamhouse/admin/homepage /」 – Svemirko

0

試試這樣說:

var src = container.find('img').attr('src'); 
if(typeof(src) === 'undefined') { 
    alert('No src'); 
} 
2

由於src已經已經宣佈所有你需要做的是檢查其truthyness:

if (!src) alert('no src'); 

如果變量可能有一個虛假值(空字符串,零,假),那麼你應該檢查既undefinednull,如:!

if (src === null || src === undefined) 

或者利用類型轉換,因爲null == undefined

if (src == null) 
+0

最後我用你提出的第一種方法(if(!src)),但我仍然想知道爲什麼undefined在第一種情況下返回爲類型,在另一箇中爲字符串,如果我在那裏是正確的? 謝謝! – Svemirko

+0

@Svemirko:'undefined'是一個預定義變量,其值爲「undefined」。這是混亂。 – elclanrs

+0

我明白,但你不同意在這種情況下返回undefined,undefined類型的值應該會在第二個例子(undefined ==='undefined')中嚴格比較失敗嗎? – Svemirko