it공부 (개념)/javascript

자바스크립트와 파이썬의 for문은 다르다. //for in, for of, for in keys()..

cantor 2023. 3. 30. 00:00

 

동기:
나는 자바 -> 파이썬-> 자바스크립트 순서로 언어를 배웠다.
코딩테스트 연습은 파이썬으로 하고 웹개발은 자바스크립트로 진행하다 보니 
두 언어의 for in구문이 다른 의미를 가지고 있다는 것을 인지하지 못했다.

또 자바스크립트의 for in과 같은 기능을 하는 구문은 파이썬에 없다.

헷갈리기도 하고 신기하기도 해서 글을 포스팅하기로 했다.

 

 

 

 

두 언어 간 for 구문비교

 

파이썬의 for in은 반복자의 성분을 차례대로 실행문에 전달한다.

자바스크립트의 for of와 같은 기능을 한다.

 

자바스크립트의 for in은 오브젝트의 키 값을

문자열로 차례대로 반환한다. 이런 기능을 하는 함수는 파이썬에 없다.

 

 

파이썬의 for in과 자바스크립트의 for of:

반복자 iterable의 성분을 순서대로 가져오기:

 

숫자 인덱스로 반복 접근이 가능한 객체(iterable)의 요소를 

루프의 실행문에 순서대로 대입하기 위한 문법이다.

 

 

파이썬 코드

for number in [1,3,5]:
  print(number)
  
 
"""
출력결과
1
3
5
"""

 

자바스크립트 코드

for (number of [1,3,5]) {
    console.log(number);
}


/**
* 출력결과:
* 1
* 3
* 5
*/

 

자바스크립트의 for in

"오브젝트의 key"값을 문자열로 변환한 후 
실행문에 순서대로 대입한다.

 

mdn 문서

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

for in 구문은 오브젝트의 열거가능한 문자열 속성을 반복합니다.
(key가 심벌인 경우에는 무시합니다.)
해당 오브젝트가 상속받은 속성도 포함합니다.

 

설명이 다소 난해하다.

 

간단하게 말하자면 오브젝트의 key: value 성분에서

key값만 반복해서 대입한다는 뜻이다.

 

 

*enumerable string은 key 값이 열거 가능한 문자열로 처리된다는 뜻이다.

 실험결과 key가 true, false 같은 불리언 값이던  숫자로 된 값이던 문자열 (string)로 처리된다.

 

 

예제코드

const myObj = {
    1: "hello",
    true: "hi",
    grant: "nice to meet you"
};

for (key in myObj) {
    console.log(`${key}: ${myObj[key]}`)
};
/** 출력결과
* 1: hello
* true: hi
* grant: nice to meet you
*/

 

오브젝트의 성분을 참조하는 대괄호에는 문자열 값만 대입될 수 있다.

myObj [key]가 세줄 모두 정상적으로 출력된 것을 통해 key가

문자열로 처리되었다는것을 확인할 수 있다.

 

 

해당 구문과 같은 기본구문은 파이썬에 없다.

비슷한 것을 만들어보자면,  딕셔너리와 그 위에 사용할 수 있는 keys() 메서드를 조합하면 된다.

 

파이썬 예제코드

my_dict = {
     0: "hello",
     True: "hi",
    "grant": "nice to meet you"
}

for key in my_dict.keys():
  print(f"{key}: {my_dict[key]}")
  
"""
출력결과
0: hello
True: hi
grant: nice to meet you
"""

 

*파이썬에선 각각의 key들이 문자열(string)로 변환되지 않는다.

그러므로 key값으로 1과 True를 같이 사용할 수 없다. 중복 키가 된다.

 

 

게시물의 내용을 표로 요약하면 다음과 같다.

 

기능 파이썬 자바스크립트
반복자 성분 반복 for element in iterable:
    실행문

for (element of iterable) {
    실행문
    }
오브젝트(딕셔너리) key값 반복 for key in dict.keys():
    실행문
for (key in object) {
    실행문
    }

 

읽어주셔서 감사합니다.

오류나 오탈자가 있다면 댓글로 알려주세요.