2012-03-01 21 views
2

我不是一個誰已經做了很多的JavaScript。我的背景是Java/C++。我目前正在研究一個使用很多javascript的項目,但是我發現了一些對我沒有意義的東西,但是希望有一些JavaScript專家可以給我一個很好的邏輯解釋。Javascript未定義,空字符串,如果語句

var noDefinition = undefined; 
var emptyString = ""; 
var noDefinitionAndEmptyString = noDefinition + emptyString; 

console.log("NoDefinition"); 
console.log(noDefinition); 

console.log("EmptyString"); 
console.log(emptyString); 

console.log("noDefinition+emptyString"); 
console.log(noDefinitionAndEmptyString); 

console.log("************************"); 
if(noDefinition == undefined) 
{ 
    console.log("No Definition is undefined"); 
} 


if(emptyString == undefined) 
{ 
    console.log("emptyString is undefined"); 
} 

if(noDefinitionAndEmptyString == undefined) 
{ 
    console.log("noDefiniton and emptyString is undefined"); 
} 

上面代碼在我的控制檯的結果如下:
[INFO] NoDefinition
[INFO]
[INFO] EmptyString
[INFO]
[INFO] noDefinition + emptyString
[INFO] undefined
[INFO] * ** * ** * ** * **
[INFO]沒有定義未定義

因此,大家可以看到我的輸出變量noDefinition和emptyString到控制檯,它產生的空白輸出。當我連接它們時,控制檯將產生未定義的。但是,如果我繼續使用if語句並將它們中的每一個與未定義的比較。唯一的執行是第一個。

即使放到控制檯時,也會出現這種情況,只是顯示爲空白。此外,在控制檯中顯示爲未定義的串聯未能與未定義的並且從不執​​行的比較失敗。我對此感到困惑,我希望在那裏可以給我一個關於發生的事情的解釋。

+0

可能重複(HTTP://堆棧overflow.com/questions/776950/javascript-undefined-undefined) – 2012-03-01 18:59:48

回答

2

當您連接未定義用細繩就變成了串

var foo = undefined; 
var bar = ""; 
console.log(foo+bar, typeof(foo+bar)); 
* output * 
undefined string 

ECMAScript的文檔 - http://www.ecmascript.org/docs.php 不知道,但閱讀141頁的文檔,你可以找到這個

15.5.1作爲函數調用的字符串構造函數

當String被作爲函數調用而不是作爲構造函數調用時,它執行類型 轉換。

這讓我相信爲什麼用繩子任何串聯輸出一個字符串

0

使用這個代替:

if (typeof noDefinition == "undefined") ... 
+1

這是更好的方法:if(typeof noDefinition ===「undefined」) – 2014-08-18 12:30:34

2
  1. console.log當它收到一個undefined值(實現特定的)不顯示任何信息。
  2. 當您將undefined連接到空字符串時,結果值爲"undefined"。這是印刷的。

以前的要點解釋您的觀察。

0

noDefinitionAndEmptyString實際上是一個string(您可以使用console.info(typeof noDefinitionAndEmptyString)),其值爲'未定義'。這是因爲級聯 - 隱式轉換到string發生,並且不確定的變量,強制轉換爲字符串,是「未定義」字符串

0

if(noDefinition == null)涵蓋TYPEOF「不確定」和TYPEOF「空」,但你可能要添加一個和聲明,以確保它只是不是一個空字符串...像這樣:

if(noDefinitionAndEmptyString == null || noDefinitionAndEmptyString == "")

1

重寫你的例子可能揭示連接字符串和未定義值時實際發生的事情越光:

var noDefinition = undefined; 
var emptyString = ""; 
var noDefinitionAndEmptyString = noDefinition + emptyString; 
console.log("************************"); 
console.log("NoDefinition:" + " " + noDefinition + " " + typeof(noDefinition)); 

console.log("EmptyString:"+ " " + emptyString + " " + typeof(emptyString)); 

console.log("noDefinition+emptyString: " + noDefinitionAndEmptyString + " " + typeof(noDefinitionAndEmptyString)); 

console.log("************************"); 

結果:

************************ 
NoDefinition: undefined undefined 
EmptyString: string 
noDefinition+emptyString: undefined string 
************************ 
[的Javascript?:未定義==未定義]的
相關問題