원인: if 조건식에서 대입 연산자(=)를 사용하고 있습니다
if 조건 안에 등호(=) 하나만 쓰면 JavaScript는 이를 비교가 아닌 대입(assignment)으로 해석합니다. 즉, 조건을 검사하는 대신 오른쪽 값을 왼쪽 변수에 할당하게 되며, 할당된 값이 참(truthy)으로 평가되는 한 if 블록은 매번 실행됩니다.
두 값이 같은지 비교하려면 동등 연산자(==) 또는 일치 연산자(===)를 사용해야 합니다. 두 연산자의 차이는 다음과 같습니다.
==(동등 연산자) : 비교하기 전에 양쪽 값의 자료형을 자동으로 변환한 뒤 비교합니다.===(일치 연산자) : 자료형까지 포함해 엄격하게 비교합니다. 예상치 못한 형 변환으로 인한 버그를 막을 수 있어 실무에서 권장됩니다.
예제 코드
다음은 객체 배열에서 특정 ID를 검색하는 전체 예제입니다. 조건문에서 일치 연산자(===)를 사용한 부분에 주목하세요.
var details = [
{
id: 10001,
name: "John"
},
{
id: 10002,
name: "Bob"
},
{
id: 10003,
name: "Carol"
},
{
id: 10004,
name: "David"
}
]
var searchId = 10003;
for (var index = 0; index < details.length; index++) {
if (details[index].id === searchId) {
console.log(details[index].id + " found");
break;
}
}
프로그램 실행 방법
위 프로그램을 실행하려면 터미널에서 아래 명령어를 입력합니다.
node fileName.js
여기서는 파일 이름이 demo322.js라고 가정합니다.
실행 결과
정상적으로 실행되면 다음과 같이 일치하는 ID가 출력됩니다.
PS C:\Users\Amit\javascript-code> node demo322.js 10003 found