자바스크립트에서의 문자열 비교와 암시적 형 변환

자바스크립트에서는 문자열을 비교할 때 메모리 상의 문자열 값이 같은지를 비교하는 것이 아니라, 문자열의 유니코드 값에 기반하여 비교를 수행합니다. 이러한 방식으로 문자열 비교를 수행하면 때로는 예상치 못한 결과가 발생할 수 있으므로 주의가 필요합니다.

예를 들어, 아래의 예제 코드를 살펴봅시다.

let str1 = "10";
let str2 = "2";

console.log(str1 > str2); // true

예제 코드에서는 두 개의 변수에 문자열 “10”과 “2”를 할당하고, 이를 비교합니다. 첫 번째 문자열인 “10”의 유니코드 값은 49, 48이고 두 번째 문자열인 “2”의 유니코드 값은 50입니다.

문자열 비교는 첫 번째 문자의 유니코드 값을 비교하며, 첫 번째 문자의 유니코드 값이 두 번째 문자의 유니코드 값보다 크다면 첫 번째 문자열이 더 크다고 간주됩니다. 이 때문에 예제 코드에서 str1이 str2보다 크다고 판단되어 true가 출력됩니다.

하지만 만일 우리가 실제 숫자를 비교하고자 한다면, 문자열을 숫자로 변환하여 비교해야 합니다. 이를 위해서는 parseInt() 함수 등을 사용하면 됩니다.

암시적 형 변환

자바스크립트는 암시적 형 변환을 수행하는 언어로, 변수의 타입에 따라 연산 도중 자동으로 형 변환이 일어납니다. 이러한 특성 때문에 코드 작성 시 혼동을 일으킬 수 있으므로, 주의가 필요합니다.

예를 들어, 아래의 예제 코드를 살펴봅시다.

let num = 10;
let str = "20";

console.log(num + str); // "1020"

예제 코드에서는 숫자 타입의 변수 num과 문자열 타입의 변수 str을 선언하고, 이를 더한 결과를 출력합니다. num은 숫자이고 str은 문자열이지만, 자바스크립트는 더하기 연산을 수행하기 전에 str을 숫자로 암시적으로 변환합니다.

따라서 결과적으로 “1020”이라는 문자열이 출력됩니다.

암시적 형 변환은 편리한 기능이긴 하지만 때로는 예상치 못한 결과로 이어질 수 있으므로, 코드를 작성할 때 주의가 필요합니다.

참고 자료