11.1 원시값
원시 타입은 변경 불가능한 값이다.
불변성을 갖는 원시값을 할당한 변수는 재할당되면 새로운 공간을 확보하고,
재할당한 값을 저장한후, 변수가 참조하던 메모리 공간의 주소를 변경한다.
이를 불변성이라 한다.
11.1.2 문자열과 불편성
var str = 'Hello';
str = 'World';
// 변수에 재할당
자바스크립트는 개발자편의를위해 원시타입인 문자열타입을 제공한다.
문자열은 원시타입이며 변경 불가능하다.
var str = 'string';
console.log(str[0]); // s
console.log(str.length); // 6
console.log(str.toUpperCase()); // STRING
// 단, 변경불가. 데이터신뢰성 보장
str[0] = 'S';
console.log(str);
유사배열객체로, 배열처럼 인덱스로 프로퍼티에 접근가능할수있고 length 프로퍼티를 갖는 객체를 말한다.
11.1.3 값에의한전달
변수는 메모리 주소가 전달된다.
즉 변수에 값을 할당하면 , 할당받는 변수는 할당되는 변수의 원시값이 복사되어 전달된다.
11.2 객체
객체는 프로퍼티 개수가 정해져있지않고, 동적 추가 삭제가가능하다.
11.2.1 변경가능한값
var person = {
name: 'Lee'
};
person.name = "yunrap";
person.address = "bucheon"
객체를 할당한 위같은 경우는 변수는 객체를 참조하고있다라고 한다.
객체를 할당한 변수는 재할당 없이 객체를 직접 변경 할 수있다.
필자는 객체자체를 가볍게 생각해서 변경된다는것을 신기하게 생각하지 못했는데
원시값이랑 비교해 객체할당비교방법을 보니 신기하다는 생각이들었다.
얕은 복사, 깊은복사 다시보기!
11.2.2 참조에의한 전달
값에 의한 전달은 변수에 저장되있는 값이 값이다.
참조에 의한 전달은 변수에 저장되어있는 값이 참조값이다.
var person1 = {
name: 'Lee'
}
var person2 = {
name: 'Lee'
}
console.log(person1 === person2); //false
console.log(person1.name = person2.name);; //true
person1 변수와 person2 변수가 가리키는 객체는 비록 내용은 같지만 다른 메모리에 저장된 별개의 객체이다.
즉 person1변수와 person2 변수의 참조값은 전혀다른값이므로 false이다.
프로퍼티 값을 참조하는 person1.name 과 person2.name은 값으로 평가가능해서 같은 원리값이므로 true가된다.