근본없는 코딩
[JS] 개발자 99%는 틀리는 코딩문제..?! 본문
안녕하세요.
유튜브 노마드코더를 보고 재밌어서 퍼왔습니다.
생각보다 헷갈리고 많이 틀리네요.
선택지 아래에 '더보기' 누르면 답이 뜨도록 해놨으니 풀어보세요 :D
01. 이 코드의 결과는?
A) false
B) 4
C) NaN
D) " "
📌정답
# B
. 자바스크립트는 사용자에게 오류를 표시하고 싶지 않기 때문. 이를 위해 자바스크립트는 '강제형변환(Type Coercion)'이라는 프로세스를 사용한다.
. 연산에 필요한 경우 값을 한 유형에서 다른 유형으로 자동으로 변환 하는 것
. 연산자 '-'는 숫자로만 작동할 수 있으므로, 연산자는 문자열("1")을 숫자로 바꾸는 숫자 변환을 트리거 한다.
02.이 코드의 결과는?
A) false
B) 6
C) "51"
D) NaN
📌정답
# C
. 자바스크립트에서 '+' 연산자가 항상 숫자 변환을 트리거하는 것은 아니다.
. 연산자를 숫자와 문자열과 함께 사용하면, 실제로 숫자를 문자열로 변환한 다음 문자열을 연결한다.
03. 빈 배열 + 빈 객체의 결과는 무엇일까?
A) 0
B) "[]{}"
C) "[object Object]"
D) 'NaN'
📌정답
# C
. + 연산자가 배열과 객체를 모두 문자열 표현으로 변환하도록 트리거한다.
. 따라서 빈 배열 []는 "" 로 변환되고, 빈 객체 {}는 "[object Object]"로 변환된다.
. 빈 배열에 빈 객체를 더하면 "[object Object]"가 되는 것이다.
04. 빈 객체에 빈 배열을 더하면 어떻게 될까?
A) "[object Object]"
B) 0
C) {}
D) NaN
📌정답
# B
. 빈 객체 더하기 빈 배열은 0이 된다.
. "빈 객체"는 빈 객체로 간주되지 않고, 빈 코드 블록으로 간주된다. { </> }
. 따라서 아래와 같이 되고, 실제로 표현식은 +[]로 평가된다.
{
// nothing here
} + [ ]
. 더하기 기호는 빈 배열을 숫자로 변환하고, 빈 배열이 숫자로 바뀌면 0이 된다.
05. 이 코드의 결과는?
A) true
B) "truetruetrue"
C) 3
D) NaN
📌정답
# C
. + 연산자를 불리언과 함꼐 사용할 때, 자바스크립트가 이를 숫자로 변환한다.
. true는 1인 이진 참으로 바뀌게 된다. 따라서 1+1+1을 수행하게 된다.
. 같은 개념으로 true-true를 수행하면 1-1을 수행하는 것과 같으므로 0을 반환하게 된다.
06. 이 함수의 반환값?
A) 1
B) 2
C) 3
📌정답
# C
. try, catch와 finally의 작동 방식 때문.
. 함수 내부에서 try 불록은 1을 반환하려고 시도하지만, finally 블록은 예외 발생 여부와 관계없이 항상 실행되며, try 블록의 반환을 재정의할 수 있는 권한도 있다.
07. 이 작의 결과는?
A) "1.0000000000000001"
B) 1
📌정답
# B
. 자바스크립트가 16자리가 넘는 숫자를 정확하게 처리할 수 없기 때문에, 이러한 값을 '1'로 반올림 한다.
08. 이 코드는 무엇을 반환할까?
A) true
B) false
📌정답
# B
. 이 버그는 자바스크립트 뿐만 아니라 다른 프로그래밍 언어에서도 발생하는 버그
. 컴퓨터는 0과 1로 이진법으로 사고한다. 하지만 0.1 또는 0.2와 같은 일부 소수 분수는 2진수로 정확히 변환할 수 없다.
. 그래서 자바스크립트에 0.1또는 0.2를 사용하라고 지시하면, 자바스크립트는 이 숫자를 2진수로 표현하기 위해 최선을 다하지만, 결국 0.1이나 0.2보다 조금 더 큰 숫자가 된다.
. 따라서 0.1과 0.2를 더하면, 이 작은 추가 값도 합산되어, 총 합이 0.3과 약간 달라지게 된다.
. 따라서 0.1+0.2=0.3은 이러한 작은 추가 값 때문에, 합계가 정확히 0.3이 아니므로 거짓이 된다.


09. 이 코드의 결과는?
A) true
B) false
📌정답
# A
. 자바스크립트는 수학적 연산이나 비교할 때 true를 1로 취급한다.
. 따라서 참과 1을 비교할 때, 자바스크립트는 참을 1로 보기 때문에 둘이 같다고 말한다.
10. 이 코드의 결과는?
A) true
B) false
📌정답
# B
. 두 개의 등호(==)를 사용할 때, 자바스크립트는 서로 다른 유형의 데이터를 서로 일치하도록 변환하여 도움을 주려고 한다.
. 세 개의 등호(===)를 사용할 때, 자바스크립트는 이 변환을 수행하지 않는다. 양쪽의 데이터가 유형까지 포함하여 정확히 동일한지 확인한다.
. 따라서 true === 1은 거짓이다. 참을 1로 변환할 수는 있지만, 참(blooean)은 1(number)과 서로 다른 유형의 데이터이기 때문 정확히 같지 않기 때문이다.
. 위와 같은 이유로, 자바스크립트가 예기치 않은 유형 변환을 시도하지 못하도록 항상 두 개가 아닌 세 개의 등호(===)를 사용해야 한다.
11. 이 코드의 결과는?
A) baaa
B) baNaNa
C) NaN
D) 11
📌정답
# B
. 자바스크립트에서 문자열 옆에 있는 더하기 기호 +는 해당 문자열을 숫자로 변환하려고 시도한다.
. 바나나의 경우, 두번째 "a"는 + 기호 옆에 있다. 문자 "a"를 숫자로 변환할 수 없기 때문에 NaN을 반환한다.


. 문자열에 사용되는 +기호는 문자열을 연결하기만 하므로 결국 'baNaNa'가 된다.
⚠️ 자바스크립트의 유연성은 결국 찾기 어려운 버그를 만들어 낸다.
. 자바스크립트는 매우 유연해서, 빈 객체에 배열을 추가하는 것과 같은 잘못된 작업을 시도해도 오류가 발생하지 않는다.
. 하지만 이 때문에 언어가 백그라운드에서 조용히 타입 변환을 수행하기 때문에, 발견하기 어려운 버그가 발생할 수 있다.
✨ 타입스크립트
. 타입스크립트는 말 그대로 더 나은 자바스크립트다.
타입스크립트로 블록체인 만들기 – 노마드 코더 Nomad Coders
Typescript for Beginners
nomadcoders.co
'✔ React+JS+TS' 카테고리의 다른 글
[React] VS Code로 React 시작하기 - Node.js, VS Code 설치 (0) | 2023.06.29 |
---|---|
[React] Hooks (0) | 2023.06.26 |