2014-04-04 59 views
2

我剛剛接觸Web開發的原始JavaScript方面,所以我決定學習。我知道編程的基礎知識,並且遇到了一些我似乎無法解決的問題。在JavaScript中使用數組時,我想創建一個函數來打印所有東西。所以我創建了這樣的東西。打印數組時JavaScript未定義結果

<!DOCTYPE html> 
<html> 
<head> 
    <title> Learning JavaScript </title> 
<script> 
    var names = new Array("Connor <br />", "Shane <br />", "Ty <br />", "Brandon <br />"); 

    function printArray(){ 
     for(x=0; x < names.length; x++) 
      document.write(names[x]); 
    } 

</script> 
</head> 

<body> 
    <script> 
     document.write(printArray()); 
    </script> 
</body> 
</html> 

它打印出名稱,但名稱後面還有另一段名爲'undefined'的文本。它看起來像這樣。

Connor 
Shane 
Ty 
Brandon 
undefined 

我已經厭倦了在走動了一堆條件循環而沒有得到地方。我認爲,對於我來說,理解爲什麼'未定義'在那裏以及在實際執行項目的過程中如何避免這些情況是非常好的。任何幫助都會很棒。謝謝:)

+2

的'undefined'位是當你調用'printArray'返回的值。用'printArray();'替換'document.write(printArray());'' – tewathia

+1

另外,避免'document.write' – tewathia

+0

你的代碼中有兩個'document.write',第一個(在你的函數中)執行寫操作,而另一個執行:'1:'執行'(printArray())'和'write' ....呃...未定義會導致無法寫入。 –

回答

0

這條線:

document.write(printArray()); 

使用document.write()打印功能printArray()的返回值。你的函數打印你想要的名字數組,但實際上並沒有返回一個值,所以你的外部調用得到undefined並打印出來。如果您添加return "someString";作爲printArray()的最後一行,您可以看到發生這種情況;

其實,你需要的是

<body> 
    <script> 
     printArray(); 
    </script> 
</body> 

我明白,這是一個學習的運動,但以供將來參考document.write()是不是真的很好的做法。直接設置文件正文如

document.body.innerHTML = "someHTML<br>"; 

是更好的方法。

+0

Ohhhh謝謝!我一直在使用JQuery一段時間,並認爲我需要學習實際的JavaScript而不是框架。 YouTube上的教程表示,如果我想要在屏幕上顯示某些內容,那麼我必須使用document.write();謝謝你這麼快回到我身邊! –

0

DEMO

var names = [ "Connor <br>", "Shane <br>", "Ty <br>", "Brandon <br>"]; 

var html = ""; 
function printArray(){ 
    for(var x=0; x < names.length; x++){ 
     html += names[x]; // Populate string with array values 
    } 
    document.body.innerHTML = html; // Append string only once 
} 

printArray(); 

document.write一種形式,應該有利於其他方法,如innerHTML來代替。

使用字符串表示形式來保存所有提取的HTML並只追加到所需的元素一次。

Why is document.write considered a "bad practice"?

+0

[*文件。寫*](http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#document.write())不被棄用。目前版本的[W3C HTML5](http://www.w3.org/html/wg/drafts/html/CR/webappapis.html#document.write())和[WHATWG HTML「Living Standard 「](http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#document.write())。 – RobG

+0

@RobG ups true,我用了一個錯誤的名詞,因爲你的鏈接是sais:'!警告此方法具有非常特殊的行爲。「我們是否應該棄用它?這是另一個問題。 –

+0

好吧我想我明白那裏發生了什麼,謝謝你的幫助:) –

0

Roko寫了什麼,並將<br>從您的數據移動到代碼。

var names = [ "Connor", "Shane", "Ty", "Brandon"]; 

var html = ""; 
function printArray(){ 
    for(var x=0; x < names.length; x++){ 
     html += names[x] + '<br>'; // Populate string with array values 
    } 
    document.body.innerHTML = html; // Append string only once 
} 

printArray(); 

這使得它更容易改變你的HTML,例如:

 html += '<p>' + names[x] + '</p>'; // Populate string with array values 
+0

唉謝謝,我看到如何消除數據突破總的來說會更好。這樣我就可以在沒有休息的情況下在其他地方使用這些數據。謝謝。 –

+0

'o_O'而不是張貼一個重複的答案,你可以評論現有的一個只需注意:'html + = names [x] +'
';' –

+0

@ RokoC.Buljan:我沒有想到那,但你說得對,對不起。 –