2016-06-12 71 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