const person = {
name: '곽지욱',
age: 24
};
// name이 키(key)이며,
// '곽지욱'이 값(value)이다.
프로퍼티(Property)라고 하며, 객체가 가지고 있는 함수를 메서드 라고함const obj = {
name: '곽지욱', // name 프로퍼티
age: 20, // age 프로퍼티
sayHello: function() { // sayHello 메서드
console.log('Hello!');
},
sayHi() { // 이렇게도 선언할 수 있다.
console.log('Hi!');
}
};
객체 안에 있는 프로퍼티나 함수에 접근하기 위해서는 크게 두 가지 방법이있다.
점표기법 - 예) 객체.key
person.name
person.age
person.gender
person.hello()
person.bobby.name
person.bobby.alert()
예) 객체['key']person['name']
person['age']
person['gender']
person['hello']()
person['hobby']['name']
person['hobby']['alert']()
Before
function printPerson(name, age, hobby) {
console.log(`제 이름은 ${name}이며, 나이는 ${age}살 입니다.그리고 취미는 ${hobby} 입니다.`);
}
printPerson('곽지욱', 10, '헬스');
After
function printPerson(person) {
console.log(`제 이름은 ${person.name}이며, 나이는 ${person.age}살 입니다.그리고 취미는 ${person.hobby} 입니다.`);
}
const person = {
name: '곽지욱',
age: 10,
hobby: '헬스'
};
printPerson(person);
const person = {
name: '곽지욱',
age: 10,
hobby: '헬스'
};
const { name, age, hobby } = person;
const person1 = {
name: '곽지욱',
age: 10,
hobby: '헬스'
};
const person2 = {
name: '홍길동',
age: 20,
hobby: '축지법'
};
const person3 = {
name: '도깨비',
age: 30,
hobby: '도술'
};
...
const person10 = {
...
};
팩토리 함수를 사용해야함function createPerson(name, age, hobby) {
return {
name: name,
age: age,
hobby: hobby
};
};
const person1 = createPerson('곽지욱', 10, '헬스');
const person2 = createPerson('홍길동', 20, '헬스');
const person3 = createPerson('김길동', 30, '헬스');
const person4 = createPerson('고길동', 40, '헬스');
const person5 = createPerson('한길동', 50, '헬스');
const person6 = createPerson('최길동', 60, '헬스');
class Person {
constructor(name, age, hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
}
}
const person = new Person('곽지욱', 20, '헬스');
console.log(person)
프리미티브 타입이 아닌 것들은 객체타입 또는 참조타입이라고 한다.
프리미티브 타입 값을 다른 변수에 할당하면 값 자체를 넘겨주는 것이기 때문에 값의 원형이 변경되진 않는다.
let str1 = 'hello';
let str2 = str1;
str2 = 'world';
console.log('str1: ', str1); // str1: hello
console.log('str2: ', str2); // str2: world
let obj1 = { name: '곽지욱', age: 20 };
let obj2 = obj1;
obj2.age = 30;
obj2.hobby = '헬스';
console.log('obj1: ', obj1); // obj1: {name: '곽지욱', age: 30, hobby: '헬스'}
console.log('obj2: ', obj2); // obj2: {name: '곽지욱', age: 30, hobby: '헬스'}
function changeName(username) {
username = '홍길동';
}
const name = 'GYMCODING';
changeName(name);
console.log('name: ', name); // name: GYMCODING
Call by Value 는 값 자체를 username에 할당하기 때문에 username 값을 변경해도 함수밖의 name은 변경되지 않는다. 즉 값이 복사된 것.
function changeName(people) {
people.name = '홍길동';
}
const person = { name: 'GYMCODING' };
changeName(person);
console.log('name: ', person.name); // name: 홍길동
... 표기법을 사용하여 사용할 수 있다.let obj = {
name: '곽지욱',
age: 20
};
let person = {
...obj,
hobby: '헬스'
};
console.log('person: ', person);
// [출력]
// person: {name: '곽지욱', age: 20, hobby: '헬스'}
const person = {
name: '홍길동',
age: 20,
job: '개발자'
};
for (let key in person) {
console.log(`key: ${key}, value: ${person[key]}`);
}
// [출력]
// key: name, value: 홍길동
// key: age, value: 20
// key: job, value: 개발자
const person = {
name: '곽지욱',
};
console.log('name' in person) // true
console.log('age' in person) // true
if ('name' in person) {
console.log('이름이 정의되어 있습니다.');
}