for-in 루프에서 프로퍼티의 값이 숫자인지 판단하는 방법
조회수 403회
현재 인터넷으로 코딩 독학 중인 사람입니다. 제가 지금 배우고 있는 사이트의 한 예시를 가져온 것입니다.
var obj = {
name: "object",
age: 10,
weight: 5
}
var sum = 0;
for ( var i in obj ){
if( typeof( Object.keys(i) ) == "number" ){
sum = sum + i ;
}
}
console.log("sum :", sum);
Object.keys(i)
를 통해서 객체 obj 의 value 값들 중 typeof 가 number 인 것들을 (value 값이 숫자인 것들)
모두 합한 값은 sum 에 넣어 출력 하라는 예시 인데 실제로 실행을 해보니 0 이 나오고
숫자를 value 값으로 가지고 있는 key 들의 type 은 number 가 아닌 object 로 나옵니다.
어떻게 코드를 변경해야 원하는 대로 작동이 될지 모르겠습니다...
도와주세요!
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
결론
이렇게 고치세요.
for (var i in obj) { if (typeof obj[i] == 'number') { sum += obj[i]; } }
문제점
원래의 코드에서:
for (var i in obj) { if (typeof( Object.keys(i) ) == "number") { sum = sum + i ; } }
이 부분만 살펴보죠.
i
는obj
의 프로퍼티 중 어느 하나의 이름입니다. 질문 내용대로면 'name', 'age', 'weight'에 해당합니다. 이 중 'age'가i
에 할당되었다 칩시다. 그러면 코드가 아래와 같겠죠?typeof Object.keys('age');
Object.keys()
메서드에 문자열을 할당하면 문자열 길이만큼의 요소가 있는 배열을 반환합니다. 요소는 0부터 1씩 증가하지만 타입은string
인 숫자입니다. (이 숫자들이 무슨 의미인지는 저도 모릅니다. 0부터 시작하니 아마도 인덱스겠죠) 아래와 같습니다:typeof [ "0", "1", "2" ]
자바스크립트에서 배열은 객체이기 때문에
typeof
연산자는 'object'를 반환합니다.그래서
if
문 안으로 진입할 수 없고sum
의 초기화값인 0을 그대로 출력하게 됩니다.
댓글 입력