2016-06-12 15 views
0

Warum funktioniert die Top-Version nicht und die untere Funktion funktioniert? Ich lerne, wie man Objekte schafft und benutzt, und das verwirrt mich. Ich nehme an, es hat damit zu tun, dass ich ein Objekt im oberen Teil verwende? RechtsFunktionsvariable 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);

, wenn ich denke, ich den Dreh raus zu bekommen ich völlig ins Gesicht geschlagen werden!

+0

Ich glaube, Sie aus der Lektüre ein JavaScript-Tutorial profitieren würden: http://eloquentjavascript.net /04_data.html Da stimmt einiges nicht. –

+0

Danke für das lesen @FelixKling! Ich brauche mehr Zeug wie dieses ... Jeder andere Neuling liest wäre toll btw;) – user1607991

Antwort

2

Das Problem ist, dass Kaffee in keinem Bereich als Variable definiert ist, können Sie die Notation von obj ["Kaffee"] Kaffee als String übergeben, um dies zu arbeiten. Oder Sie können es als slot1.coffee nennen, damit Sie es erreichen.

2

Die obere Version nicht wegen dieser beiden Linien

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

funktioniert Wenn ein Objekt abrufen a.b oder a['b'] genug ist, wo ein das Objekt ist und b ist der Schlüssel

ein Doing + '.' + b führt zu einer Verkettung, anstatt den Wert abzurufen.

In Funktion Pass coffee als String sonst wird es als nicht definierten Wert übergeben, da es Kaffee vermuten, wird irgendwo erklärt, die diese Änderung nicht

Stellen ist

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

Oh, okay ... ich verstehe. Ich habe mir allerdings ein Tutorial angeschaut und Werte von einem Objekt wie slot1 zurückgegeben, indem ich die Punktsyntax verwendet habe ... wie slot1.coffee returned 1. ist der richtige Weg, um eine Eigenschaft von slot1 ['coffee'] zurückzugeben ?? Entschuldigung für die Nub-Ness: \ – user1607991

+0

@ user1607991: 'foo.bar' ist äquivalent zu' foo ['bar'] '. Sie können beide verwenden. –

1

Versuchen zu verwenden slot1.coffee statt kaffee

findItem(slot1, slot1.coffee); 
1

Wenn Sie einen Eigenschaftsnamen in einer Variablen haben, verwenden Sie ein Objekt wie ein Array myObject[property] Dabei ist Eigenschaft eine Variable, die den Namen der Eigenschaft des Objekts enthält, für den Sie den Wert erhalten möchten.

Auch coffee ist nicht als Variable verwendet werden, aber eine Zeichenfolge "coffee" oder '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

Okay, das untere num2 funktionierte, weil 3 eine Zahl ist und es wusste, dass es keine Variable war ... Ich dachte, du könntest alles in die Klammern setzen und es wie eine leere Variable deklarieren (wenn das Sinn macht). Danke – user1607991

+0

Nun ... Zahlen können Lust lust wie das geben-geben Sie in 25 und js wissen es 25 eine ganze Zahl ...aber bei Strings müssen Sie sie in Anführungszeichen setzen, sonst wird es zu Variablennamen führen ... wie in Ihrem Beispiel ist 'slot1' eine Variable, die ein Objekt enthält, aber '' slot1'' wäre eine Zeichenkette. – shramee

+0

Wenn Sie "Kaffee" eingeben, versucht es, nach einer Variablen namens "Kaffee" zu suchen, aber es kann nirgends den Fehler finden. Wenn Sie jedoch "Kaffee" eingeben, wissen Sie, dass Sie von einer Schnur sprechen, die Kaffee sagt. – shramee

Verwandte Themen