동기:
나는 자바 -> 파이썬-> 자바스크립트 순서로 언어를 배웠다.
코딩테스트 연습은 파이썬으로 하고 웹개발은 자바스크립트로 진행하다 보니
두 언어의 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 문서
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) { 실행문 } |
읽어주셔서 감사합니다.
오류나 오탈자가 있다면 댓글로 알려주세요.
'it공부 (개념) > javascript' 카테고리의 다른 글
변수선언식의 왼쪽에도 중괄호{}가 온다! : 구조 분해할당 (0) | 2023.03.31 |
---|---|
if, while 조건문을 사용할 때 false로 평가되는 값들 : falsy 값 정리 (0) | 2023.03.29 |
dependencies: 의존성이란? package.json과 함께 알아보기 /자바스크립트, Node.js (0) | 2023.03.19 |
자바스크립트에서 랜덤 정수 출력하기 (0) | 2023.03.06 |
filter(필터): 배열의 성분이 불편해? / 자바스크립트 메서드 (0) | 2023.02.21 |