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

난 당신이 자바 스크립트 튜토리얼을 읽고 도움이 될 생각 문자열로 사용할 수 : http://eloquentjavascript.net /04_data.html. 여기에는 몇 가지 잘못된 점이 있습니다. –

+0

@FelixKling을 읽어 주셔서 감사합니다! 이 같은 물건이 더 필요해. 다른 초보자라도 굉장히 좋을거야.) – user1607991

답변

2

문제는 커피가 변수로 어떤 범위에서도 정의되지 않는다는 것입니다. obj [ 'coffee']라는 표기법을 사용하여 이것을 작동시키기 위해서는 커피를 문자열로 사용할 수 있습니다. 또는 당신이 그것을 얻기 위해서 당신은 slot1.coffee라고 부를 수 있습니다. A는 객체이며, 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']에 의해 속성을 반환하는 올바른 방법은 무엇입니까 ?? nub-ness에 대한 사과 : \ – 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는 그것을 정수로 알 것입니다 ...하지만 문자열을 사용하면 따옴표 안에 변수 이름과 충돌 할 수 있습니다. 예를 들어, 'slot1'은 객체를 포함하는 변수이지만'slot1'은 문자열입니다. – shramee

+0

'coffee'를 타이핑하면'coffee'라는 이름의 변수를 찾지 만 오류가있는 곳에서는 찾을 수 없습니다. 그러나''커피 ''라고 치면 커피를 말하는 끈에 대해 이야기하고 있음을 알게됩니다. – shramee

관련 문제