2014-12-31 91 views
2

好吧,我只是在回顧JavaScript中的一些基本編程原則(我是編程新手,請耐心等待)。下面是我遇到的問題(特別注意數組的字符串組件)。JavaScript數組問題

var name = new Array(); 
 
var sales = new Array(); 
 
var total = prompt("How many total salesmen does your department employ?"); 
 

 
for(i = 0; i < total; i++) 
 
{ 
 
name[i] = prompt("What is his/her (the salesman's) name?"); 
 
sales[i] = prompt("How much (in dollars) did he/she sell?"); 
 
} 
 
for(j = 0; j < i; j++) 
 
{ 
 
document.write(name[j]+" had $"+ sales[j]+" in sales!<br>"); 
 
}

正如你所看到的,它只是一個簡單的代碼來讓我熟悉各類元素的數組。出於某種原因,代碼返回:

undefined had $100 in sales! 
undefined had $2999 in sales! 
undefined had $4999 in sales! 
undefined had $32342 in sales! 

這正是我需要的,除了一個事實,即每名數組中的元素是不確定的。

我在想這可能是document.write函數的問題,因爲我讀過它可能是可疑的,但我仍然不知道如何正確地工作。

任何幫助將不勝感激!

+2

工作得很好,對我來說 - > ** HTTP://jsfiddle.net/k52betc3/** – adeneo

+1

@adeneo那的jsfiddle被打破了我Chrome – meagar

+1

@adeneo me too im正在運行版本號39.0.2171.95 m Chrome –

回答

6

namewindow的財產。您的功能在全球範圍內不起作用。其重現問題將是簡單的例子...

var name = {} 
 
name.blah = "blah" 
 
document.write(name.blah); // undefined 
 
    

把它包在功能,或選擇不同的變量名。 names是比較合適的任何方式,因爲它是多個對象的數組,你應該爲變量選擇一個複數的名字:

var names = new Array(); 
 
var sales = new Array(); 
 
var total = prompt("How many total salesmen does your department employ?"); 
 

 
for(i = 0; i < total; i++) 
 
{ 
 
names[i] = prompt("What is his/her (the salesman's) name?"); 
 
sales[i] = prompt("How much (in dollars) did he/she sell?"); 
 
} 
 
for(j = 0; j < i; j++) 
 
{ 
 
document.write(names[j]+" had $"+ sales[j]+" in sales!<br>"); 
 
}

+0

工作,修復,謝謝你的迴應的徹底性。我知道這很簡單,我忽略了。 –

2

我可以重現你在Chrome中描述的行爲。

我認爲這是因爲JavaScript中帶有全局變量的微妙之處。如果您在頂層代碼中(不在函數內部)並聲明一個變量,則將其視爲全局變量,這意味着它實際上是window對象的屬性。已經有一個名爲window.name的屬性,它是由瀏覽器預定義的,因此您嘗試創建名爲name的全局變量會產生一些意外行爲。

如果您將name變量重命名爲names,則它可按預期工作。 (因爲它是一堆名字,無論如何,names是一個更好的名字。)

或者,你可以將整個東西包裝在一個函數中並立即調用它。然後,你有局部變量(這確實是變量),而不是全局變量與他們怪異的行爲:

(function() { 
    var name = new Array(); 
    var sales = new Array(); 
    var total = prompt("How many total salesmen does your department employ?"); 

    for(i = 0; i < total; i++) 
    { 
    name[i] = prompt("What is his/her (the salesman's) name?"); 
    sales[i] = prompt("How much (in dollars) did he/she sell?"); 
    } 
    for(j = 0; j < i; j++) 
    { 
    document.write(name[j]+" had $"+ sales[j]+" in sales!<br>"); 
    } 
})(); 
+1

謝謝,由於我是編程新手,我忽略了一個變量名與窗口屬性重疊的可能性。我現在可以停止撕掉我的頭髮了。 :) –

+0

是的,關於全局變量變成'window'屬性,而不是普通變量的事情,是JavaScript的一個大問題 - 有些部分JavaScript實際上非常乾淨和優雅,但是這不是其中之一。這就是爲什麼很多庫將他們所有的代碼封裝在這樣的自我調用函數中。 –