TIL

20221019 TIL 왜일까

jiwoosmile 2022. 10. 19. 13:01

 

오늘 하루의 요약

http://34.64.107.232/jjals/cl-H9wkxrn

코딩을 하다보면 될 것 같은데 안되는 경우와 되면 안될 것 같은데 되는 경우가 있다.

오늘 코딩 도장 문제를 풀다가 돼야 될 것 같은데 안되는 경우가 있었다.

몇 개의 테스트 케이스에서 런타임 에러가 떠서 왜인지 확인을 하다가

입력값과 반환값 모두 long을 다루고 있는데 Integer.parseInt를 쓰고 있는 부분이 있어서 고쳤더니 해결이 되었다.

코딩 문제를 풀다보면 몇 케이스에서 런타임 에러가 뜨는 경우는 보통 자료형과 관련이 있는 경우가 많았다.

인자의 자료형을 꼭 먼저 확인하고, 만약 실수로 못봐서 자료형을 바꿀 때는 cmd f로 찾아서 하나하나 다 잘 바꿨는지 확인을 하자.

 

그리고 코딩을 하다가 테스트 코드를 짜고 코드를 일부만 구현한 줄 알았는데 돼서 놀랐다.

자바스크립트에서 배열 길이를 넘어서는 인덱스에 값을 넣으면 그 사이 값은 undefined가 된다.

이번 코드에서는 배열에서 undefined가 아닌 부분을 연결해야 했는데, join으로 연결을 하고

undefined를 걸러내는 작업을 어떻게 해야하나 고민하던 중에

그냥 join만으로 테스트가 통과해버렸다.

 

undefined + '1' 는 'undefined1'의 문자열이 되지만,

Array.prototype.join(separator)의 spec을 보면

https://262.ecma-international.org/5.1/#sec-15.4.4.5

If element0 is undefined or null, let R be the empty String; otherwise, Let R be ToString(element0).

라고 쓰여 있다.

따라서 배열의 undefined나 null은 join 메소드에서 빈 문자열이 된다.

console.log([1, , 3].join()); // '1,,3'
console.log([1, undefined, 3].join()); // '1,,3' 

 

 

항상 자료형을 잘 확인하고, 안될 것 같은 부분이 되면 spec을 찾아보자!