2015-05-26 233 views
0

有各種函數返回「未定義」的例子,但我無法找到一個原因,爲什麼我的JS條件(我簡化爲一個簡單的IF ... ELSE語句)是在控制檯中返回「undefined」。Javascript conditoinal返回「undefined」

var blue = "color"; 
var green = "color"; 


if (blue = green) { 
    console.log("success"); 
} 
else { 
    console.log("fail"); 
} 

有人能解釋什麼是undefined?提前致謝。

+0

中的console.log()返回的是'undefined' ,而不是代碼本身。 – dandavis

回答

2

你的if包含一個賦值,而不是一個相等性檢查。

替換:

blue = green 

有了:

blue == green 

或最好:

blue === green 

由於兩個預計將字符串,你可以(也應該)使用全等檢查(===),那裏。

這「三重平等」檢查,如果兩個類型和值相等,相比於只爲==值:

alert("1 === '1': " + (1 === '1')); 
 
alert("1 == '1': " + (1 == '1'));


現在,如果你運行該代碼一個瀏覽器的控制檯,實際的代碼不會返回一個值,因此,它會輸出undefined,除了console.log()的結果:

enter image description here

+0

永遠不要使用double等於:http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons –

+1

永遠不要說_「從不」_。如果你知道你在比較什麼類型,並且熟悉JS的類型轉換,那麼'=='確實不是那麼糟糕。 – Cerbrus

+0

真的嗎? 2降價?這個答案有什麼錯誤? – Cerbrus

1

您當前的if語句正在執行將藍色設置爲等於綠色的操作。單個等號不會真正檢查真值。

爲了在這裏運行布爾檢查,您需要使用三重等號運算符。

if (blue === green) 

如果您在控制檯中運行這個,這裏是它的外觀:

enter image description here

因爲你的if語句實際上並不返回任何東西(而不是,它只是記錄到控制檯)您將收到undefined作爲輸出。

+0

你可能想要解釋_why_。 – Cerbrus

+0

這仍然導致未定義。 –

+0

我剛剛在控制檯中測試了這個。 if語句在與triple-equals一起運行時返回'success'。我是否遺漏了未發佈的OP代碼的一些重要部分? –

1

您在控制檯中看到未定義的原因是因爲這是執行的代碼完成的。最後執行的語句是if else子句,它沒有返回值,因此undefined

需要注意的第二個重要方面是,您在if語句內部進行了賦值,並且作爲該賦值的結果,您總是要以if("color")結尾,這將始終爲真,並且作爲結果console.log將始終發生。

這導致控制檯看上去就像

"success" 
undefined 

因爲有人downvoted這顯然是不熟悉的執行控制檯代碼

enter image description here