강의로 돌아가기
-

typeof(obj[property]) 와 typeof(obj.property)

obj[property]로 접근할때는 답이 나오는데 obj.property 로 하면 undefined입니다.
왜 인지 알려주실수있으세요? 감사합니다!

var sum = 0;
for ( var property in obj ){
    if( typeof( obj[property] ) == "number" ){
        sum = sum + obj[property];
    }
작성중인 코드―forInTest
1
2
3
4
5
6
7
8
9
10
11
var obj = {
    name: "object",
    age: 10,
    weight: 5
}
var sum = 0;
for ( var property in obj ){
    if( typeof( obj[property] ) == "number" ){
        sum = sum + obj[property];
    }
}
2 개의 답변
-

저도 이게 궁금해요. 그냥 헬로월드 실행창의 문제인가요?

이주한

for in문에 선언된 property 는 변수입니다. 변수로 '.' 을 붙여서 값을 가져올 수 없어요.
오브젝트 타입에 . 다음에 변수를 사용하는 방식도 불가능하죠, .으로 붙는순간 오브젝트의 속성으로 인식합니다.
obj.property 의 차이와 obj[property] 의 차이를 생각해보시면 이해가 되실겁니다.
obj는 name,age,weight라는 속성값을 갖고있습니다. obj.속성명 으로 접근하면 obj의 속성으로 인식하기때문에
obj라는 오브젝트에 property라는 속성을 찾는데 없으니, undefined 값이 나옵니다.
그렇기 때문에 number타입이 아니니 sum에 합쳐지지 않게되죠. 그래서 정답으로 뜨지 않아욥
for in 문에서 변수를 사용하면 변수property의 값을 obj의 오브젝트의 속성을 배열로 만들어주고 그 길이만큼
루프를 돕니다. obj[변수값(속성값)]으로 접근하기떄문에 이거는 제대로 가져오게 됩니다. 때문에 정답!

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.