3.3 참조 타입의 특성

vencott·2021년 6월 2일

Number, String, Boolean, undefined, null을 제외한 모든 값은 객체다

배열, 함수 등도 객체이며 이들은 참조 타입이라 불린다

var objA = { // objA는 객체 자체가 아닌 객체의 참조값을 저장할 뿐이다.
    val : 30
};

var objB = objA; // 이제 objA와 objB는 같은 객체를 참조한다.

console.log(objA.val);
console.log(objB.val);

objB.val = 50; // 따라서 objB가 참조하는 객체의 프로퍼티를 변경하면 같은 객체를 참조하는 objA의 값 또한 바뀐다.
console.log(objB.val);
console.log(objA.val);

3.3.1 객체 비교

동등 연산자(==)를 사용해 두 객체를 비교할 때는 객체의 프로퍼티값이 아닌 참조값을 비교한다

var a = 100;
var b = 100;

var objA = {val: 100};
var objB = {val: 100};
var objC = objB;

console.log(a == b); // true
console.log(objA == objB); // false
console.log(objA.val == objB.val); // true
console.log(objB == objC); // true

3.3.2 참조에 의한 함수 호출 방식

call-by-value vs call-by-reference

기본 타입은 call-by-value로, 참조 타입은 call-by-reference로 동작한다

var a = 100;
var objA = {
    value: 100
};

function changeArg(num, obj) {
    num = 200;
    obj.value = 200;

    console.log(num); // 200
    console.log(obj.value); // 200
}
console.log(a); // 100
console.log(objA.value); // 100
changeArg(a, objA);
console.log(a); // 100
console.log(objA.value); // 200

출처: 송형주, 고현준 저, 『인사이드 자바스크립트』, 한빛미디어(2014)

profile
Backend Developer

0개의 댓글