Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 ==와 === 중 어떤 동등 연산자를 사용해야 할까?

JavaScript 동등 연산자의 두 가지 종류

JavaScript에는 값의 일치 여부를 확인하는 두 가지 동등 연산자가 있습니다. 바로 이중 등호(==)삼중 등호(===)입니다. 두 연산자는 이름은 비슷하지만 동작 방식에 중요한 차이가 있으며, 이 차이를 이해하는 것은 버그 없는 코드를 작성하는 데 필수적입니다.

이중 등호(==): 추상적 동등 비교

이중 등호(==)는 추상적 동등 비교 연산자입니다. 비교를 수행하기 전에 피연산자들의 타입을 강제로 변환(타입 강제 변환, type coercion)하여 같은 타입으로 맞춘 뒤 값을 비교합니다.

예를 들어 다음과 같습니다.

5 == 5      // true
'5' == 5    // true
5 == '5'    // true
0 == false  // true

'5'(문자열)와 5(숫자)처럼 타입이 달라도, 비교 전에 자동으로 타입이 변환되기 때문에 true가 반환됩니다. 심지어 0과 false도 같은 값으로 취급됩니다. 이러한 암묵적인 타입 변환은 예측하기 어려운 결과를 초래할 수 있어 주의가 필요합니다.

삼중 등호(===): 엄격한 동등 비교

삼중 등호(===)는 엄격한 동등 비교 연산자(strict equality operator)입니다. 타입 변환 없이 값과 타입을 모두 비교하며, 타입이 다르거나 내용이 다르면 false를 반환합니다.

예를 들어 다음과 같습니다.

5 === 5     // true
5 === '5'   // false

객체 비교 시 주의할 점

객체는 값이 아닌 참조(reference)로 비교된다는 점도 기억해야 합니다. 내용이 완전히 같아도 서로 다른 객체 인스턴스라면 false가 반환됩니다.

var v1 = {'value': 'key'};
var v2 = {'value': 'key'};
v1 === v2   // false

v1과 v2는 내용이 같지만 메모리상 서로 다른 객체를 가리키므로 false가 됩니다. 객체의 실제 내용을 비교하려면 각 속성을 하나씩 비교하거나 JSON.stringify() 같은 방법을 활용해야 합니다.

그렇다면 무엇을 사용해야 할까?

일반적으로 ===를 사용하는 것이 권장됩니다. 타입 변환이 일어나지 않기 때문에 코드의 의도가 명확하고, 예상치 못한 결과를 방지할 수 있습니다. ESLint 같은 정적 분석 도구도 == 대신 === 사용을 기본 규칙으로 권장하는 경우가 많습니다. ==는 null 또는 undefined 여부를 한 번에 확인하는 등 특수한 상황에서만 제한적으로 사용하는 것이 좋습니다.