20221019 TIL 왜일까
오늘 하루의 요약
코딩을 하다보면 될 것 같은데 안되는 경우와 되면 안될 것 같은데 되는 경우가 있다.
오늘 코딩 도장 문제를 풀다가 돼야 될 것 같은데 안되는 경우가 있었다.
몇 개의 테스트 케이스에서 런타임 에러가 떠서 왜인지 확인을 하다가
입력값과 반환값 모두 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을 찾아보자!