본문 바로가기
Language/JavaScript

[ JS 기초 ] 값 비교 ==, ===, 객체 비교

by IM조이 2021. 6. 28.

비교에 대해 아주 간단히 정리하면

  • 숫자, 문자열, 불리언 값 비교 : ==,=== 을 통해 비교
    • == : 값을 비교
    • === : 값과 형을 비교 (메모리 주소값도 비교)
    • === 이 == 에 비해 더 엄격
      • 프로젝트를 할 때는 보통 == 를 사용해서 비교해왔음
      • 하지만 정확한 비교를 위해서는 === 사용

 

예시 코드

console.log("1" == 1)	// true
console.log("1" === 1)	// false

자바스크립트는 == 로 값을 비교할 때 비교하기 전에 문자열 "1" 을 숫자 1로 변환시킨다.
반면, === 는 형(타입)까지 비교하기 때문에 문자열인 "1"과 숫자 1은 다르다고 판단한다.

 

그렇다면 두 객체는 어떻게 비교해야 할까?

위에서 사용한 ==, ===를 통해 접근하면 기대했던 결과와 다른 값이 나온다. 

var sample_object1 = {}
var sample_object2 = {}

console.log(sample_object1 == sample_object2)	// false
console.log(sample_object1 === sample_object2)	// false

 

그래서 객체를 비교할 때는 라이브러리(lodash 등) 을 썻 비교하기도 하고, 귀찮지만 코드로 객체 내부를 돌며 하나하나 비교해볼 수도 있다.

function equal_check(obj1, obj2) {
    var obj1Keys = Object.getOwnPropertyNames(obj1)
    var obj2Keys = Object.getOwnPropertyNames(obj2)
    
    if (obj1Keys.length != obj2Keys.length) {
        return false
    }
    
    // 객체 내부를 돌면서 속성값을 비교
    for (var i=0; i < obj1Keys.length; i++) {
        var keyName = obj1Keys[i]
        if (obj1[keyName] != obj2[keyName]) {
            return false
        }
    }
    return true
}

console.log(equal_check({"name":"ddubadduba","age":100},{"name":"dduba-dduba","age":50})) // false

 

댓글