2016-06-12 63 views
0

爲什麼最高版本不起作用,而較低的功能工作?學習如何創建和使用對象,這讓我感到困惑。我認爲這與我在頂部使用一個對象的事實有關?函數變量undefined

var slot1 = { 
 
    coffee: '1', 
 
    tea: '2', 
 
    espresso: '3' 
 
} 
 

 
function findItem(obj, prop){ 
 
    var item = obj + '.' + prop; 
 
    console.log(item); 
 
} 
 
findItem(slot1, coffee); 
 

 

 
function addNumbs(num1,num2){ 
 
\t var answer = num1+num2; 
 
    console.log(answer); 
 
} 
 
addNumbs(4,3);

權當我覺得我得到的是我得到的臉完全拍了一下掛!

+0

我認爲你會從閱讀的JavaScript教程中受益:http://eloquentjavascript.net /04_data.html。這裏有很多錯誤。 –

+0

感謝您閱讀@FelixKling!我需要更多這樣的東西...任何其他新手讀取將是真棒btw;) – user1607991

回答

2

問題在於咖啡沒有在任何範圍內定義爲變量,您可以使用obj ['coffee']的符號傳遞咖啡作爲字符串以使其工作。或者你可以把它叫做slot1.coffee,以便讓你達到目的。

2

上部版本不因爲這兩條線

var item = obj + '.' + prop; & findItem(slot1, coffee);

的工作當檢索對象a.ba['b']是足夠其中a是對象和b是關鍵

做一個+'。'+ b將導致連接,而不是檢索值。

在功能通coffee作爲字符串,否則它會通過爲不定值,因爲它會假設咖啡的地方聲明這不是

使這一變化

var slot1 = { 
    coffee: '1', 
    tea: '2', 
    espresso: '3' 
} 

function findItem(obj, prop){ 
    var item = obj[prop]; 
    document.write('<pre>'+item+'</pre>') 
} 
findItem(slot1,'coffee'); 

DEMO

+0

哦,好吧...我明白了。我正在看一個教程,他們通過使用點語法從像slot1這樣的對象返回值... like slot1.coffee返回1.是通過slot1 ['coffee']返回屬性的正確方法?爲nub-ness道歉:\ – user1607991

+0

@ user1607991:'foo.bar'相當於'foo ['bar']'。你可以使用兩者。 –

1

嘗試使用slot1.coffee而不是咖啡

findItem(slot1, slot1.coffee); 
1

如果在變量使用對象中有屬性名稱,如數組myObject[property]其中屬性是一個變量,其中包含要獲取值的對象的屬性名稱。

而且,coffee不能被用作可變的,但字符串"coffee"'coffee'

var slot1 = { 
 
    coffee: '1', 
 
    tea: '2', 
 
    espresso: '3' 
 
} 
 

 
function findItem(obj, prop){ 
 
    var item = obj[prop]; // You need to access object property as if object was an array when you have property name in variable. 
 
    console.log(item); 
 
} 
 
findItem(slot1, 'coffee'); // You need coffee as a string here, variable coffee was never defined 
 

 

 
function addNumbs(num1,num2){ 
 
\t var answer = num1+num2; 
 
    console.log(answer); 
 
} 
 
addNumbs(4,3);

+0

好吧,所以較低的num2工作,因爲3是一個數字,它知道它不是一個變量......我想你可以把任何東西放在括號中,它把它當作聲明一個空變量(如果這是有道理的)。謝謝 – user1607991

+0

呃......數字可以像25那樣聲明好像--js會知道它25是一個整數...但是對於字符串,你需要將它們放在引號中,否則它將與變量名稱衝突......例如,「slot1」是一個包含對象的變量,但「slot1」將是一個字符串。 – shramee

+0

當你輸入「咖啡」時,它試圖找到名爲「咖啡」的變量,但它找不到任何地方,因此錯誤。然而,當你輸入「咖啡」時,它知道你在說一串說咖啡的字符串。 – shramee