객체(object)
key와 value로 이루어진 프로퍼티의 집합
// 생성자 함수로 만들었기 때문에 strig타입 아닌 object 이다
var pp = new String ('아아')
console.log(typeof(pp)) // object
----------------------------------
//
var pp = String ('아아')
console.log(typeof(pp)) // string
생성자 함수
// 생성자 함수
function Person(name, gender) {
var married = true; // private
this.name = name; // public
this.gender = gender; // public
this.sayHello = function(){ // public
console.log('Hi! My name is ' + this.name);
};
}
var person = new Person('Lee', 'male');
console.log(typeof person); // object
console.log(person); // Person { name: 'Lee', gender: 'male', sayHello: [Function] }
console.log(person.gender); // 'male'
console.log(person.married); // undefined
// 함수 내에서 선언된 변수는 외부에서 참조가 불가능하지만 this 값은 외부에서 참조가 가능하다
프로퍼티 값 읽기
ex)
var person = {
'first-name': 'Ung-mo',
'last-name': 'Lee',
gender: 'male',
1: 10
};
console.log(person);
console.log(person.first-name); // NaN: undefined-undefined
console.log(person[first-name]); // ReferenceError: first is not defined
console.log(person['first-name']); // 'Ung-mo'
console.log(person.gender); // 'male'
console.log(person[gender]); // ReferenceError: gender is not defined
console.log(person['gender']); // 'male'
console.log(person['1']); // 10
console.log(person[1]); // 10 : person[1] -> person['1']
console.log(person.1); // SyntaxError
객체와 변가불가성
var user = {
name: 'Lee',
address: {
city: 'Seoul'
}
};
var myName = user.name; // 변수 myName은 string 타입이다.
user.name = 'Kim';
console.log(myName); // Lee
myName = user.name; // 재할당
console.log(myName); // Kim
/* 객체를 참조하면 값이 같이 변경이 되지만 객체 안에 있는 원시타입을
참조할 경우 pass by value로 인해 복사가 된다 */
var user1 = {
name: 'Lee',
address: {
city: 'Seoul'
}
};
var user2 = user1; // 변수 user2는 객체 타입이다.
user2.name = 'Kim';
console.log(user1.name); // Kim
console.log(user2.name); // Kim
//객체 자체를 참조할 경우 pass by reference