2016-06-12 30 views
0

トップバージョンが機能せず、下位関数が機能するのはなぜですか?オブジェクトを作成して使用する方法について学ぶと、これが私を困惑させます。私はそれが上の部分にオブジェクトを使用しているという事実と関係があると仮定します。関数の変数が定義されていません

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!私はこれのようなより多くのものが必要です...他の初心者の読書はすばらしいでしょう;) – user1607991

答えて

2

問題は、コーヒーが変数としてスコープ内に定義されていないことです。これを機能させるには、コーヒーを通す文字列としてobj ['coffee']の表記を使用できます。または、それを得るためにslot1.coffeeと呼ぶこともできます。オブジェクトであり、bは

を行うキーであるa.b又はa['b']が十分であるオブジェクトを取得するときに、上側のバージョンがあるため、これらの二行& findItem(slot1, coffee);

var item = obj + '.' + prop;で動作しない

2

+ '。' + 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のようなオブジェクトから値を返しました... slot1.coffeeが返すように1. slot1 ['coffee']によってプロパティを返す正しい方法は?ナブネスの謝罪:\ – user1607991

+0

@ user1607991: 'foo.bar'は' foo ['bar'] 'と同じです。両方を使うことができます。 –

1

を使用するようにしてくださいしてくださいcoffeeの代わりにslot1.coffee

findItem(slot1, slot1.coffee); 
1

変数にプロパティ名を使用する場合は、配列myObject[property]のようなオブジェクトを使用します。ここで、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

さて、数値が3で数値が小さいので、num2が小さいので、変数ではないことが分かっていました...括弧の中に何も置くことができ、空の変数を宣言するように扱いました。ありがとう – user1607991

+0

...数字は25でそのタイプのような欲望を宣言することができ、jsはそれを整数と認識します25 ...文字列を引用符で囲む必要がある場合は、変数名と衝突します。例えば、 'slot1'はオブジェクトを含む変数ですが、' slot1''は文字列です。 – shramee

+0

'coffee'をタイプすると、' coffee'という名前の変数を見つけようとしますが、どこにもそれが見つからないのでエラーになります。しかし、あなたが ''コーヒー ''と入力すると、あなたはコーヒーを言う文字列を話していることを知っています。 – shramee

関連する問題