객체 : 실제로 존재하는 사물
'이름과 값으로 구성'된 속성(Property)을 가진 자바스크립트의 기본 데이터 타입이다.
<script>
const product = {
제품명 : '7D 건조 망고',
유형 : '당절임',
성분 : '망고, 설탕, 메타중아황상나트륨, 치자황색서',
원산지 : '필리핀'
}
</script>
객체에 접근하는 방법
// 방법 1)
product['제품명'] // '7D 건조망고'
// 방법 2)
product.제품명 // '7D 건조망고'
'온점'을 사용하면 보조 기능을 활용할 수 있어 더 많이 사용합니다.
객체의 속성 중 함수 자료형인 속성을 특별히 메소드
라고 부른다.
다음 코드에서 객체 person은 name 속성과 eat속성을 가지고 있는데, eat 속성처럼 입력값을 받아 무언가 한 다음 결과를 도출해내는 함수 자료형을 특별히 eat() 메소드라고 부릅니다.
<script>
const pet = {
name: '구름',
eat: function(food){ }
}
// 메소드 호출
pet.eat()
</script>
this
키워드를 사용한다.<script>
// 변수를 지정한다.
const pet = {
name: '구름',
eat: function(food){
alert(this.name + '은/는' + food + '을/를 먹습니다.')
}
}
pet.eat('밥')
</script>
객체를 처음 생성한 후에 속성을 추가하거나 제거하는 것을 '동적으로 속성을 추가한다' 또는 '동적으로 속성을 제거한다'라고 표현
<script>
// 객체를 선언합니다.
const student = {}
student.이름 = '노은찬',
student.악기 = '피아노',
student.장래희망 = '대통령'
console.log(JSON.stringify(student, null, 2))
</script>
객체의 속성을 제거할 때는 delete
키워드를 사용
<script>
// 객체를 선언합니다.
const student = {}
student.이름 = '노은찬',
student.악기 = '피아노',
student.장래희망 = '대통령'
delete student.장래희망
console.log(JSON.stringify(student, null, 2))
</script>
속성과 메소드를 가질 수 있는 모든 것은 객체
입니다.
1. 배열
은 객체이다
2. 함수
는 객체이다
자바스크립트에서는 실체가 있는 것중에 객체가 아닌 것을 가본 자료형
이라고 한다.
1. 숫자
2. 문자열
3. 불
위의 3개가 기본 자료형
입니다.
자바스크립트는 기본 자료형을 객체로선언하는 방법을 제공합니다.
const 객체 = new 객체 자료형 이름()
이렇게 사용하면 숫자 객체
, 문자열 객체
, 불 객체
를 생성할 수 있습니다.
- 예시
'안녕하세요'.anchor('greeig')
"<a name="greeting">안녕하세요</a>"
'안녕하세요'.bold()
"<b>안녕하세요</b>"
자바스크립트는 사용의 편리성을 위해서 기본 자료형의 속성과 메소드를 호출할 때 일시적으로 기본 자료형
을 객체로 승급시킵니다. 그래서 속성과 메소드를 사용할 수 있다.
다만, 이러한 승급은 일시적이다. 위의 예시 속성에 기본 자료형
이 추가되는 것처럼 보였지만, 실제로는 추가되지 않은 현상이 일어납니다.ㅣ
숫자 객체 전체에 어떤 속성과 메소드를 추가할 수 있다면 기본 자료형 숫자도 속성과 메소드를 사용할 수 있다.
어떤 객체의 prototype
이라는 속성이 바로 객체 전용 옷(틀)이라고 한다.
객체 자료형.prototype.메소드 이름 = function(){
}
<!-- 소스코드 6-2-1 -->
<script>
// power() 메소드를 추가합니다.
Number.prototype.power = function(n=2){
return this.valueOf() ** n
}
// Number 객체의 power() 메소드를 사용합니다.
const a = 12
console.log(`a.power():`, a.power())
console.log(`a.power(3):`, a.power(3))
console.log(`a.power(4):`, a.power(4))
</script>
아래의 코드를 이용하면 객체네 속성 존재 여부를 확인할 수 있습니다.
<script>
// 객체를 생성합니다.
const object = {
name : '혼자 공부하는 자바스크립트',
price : '10000',
publisher : '한빛 미디어'
}
// 객체 내부에 속성이 있는지 확인합니다.
if (object.name !== undefined){
console.log('name 속성이 있습니다.')
} else {
console.log('name 속성이 없습니다.')
}
if (object.author !== undefined) {
console.log('author 속성이 있습니다.')
} else {
console.log('author 속성이 없습니다.')
}
// 위의 if문을 짧게하려면,
object.name || console.log('name 속성이 없습니다.')
object.author || console.log('author 속성이 없습니다.')
</script>
이와 같은 것을 이용하여 기본 속성도 지정을 할 수 있습니다.
기본 속성 지정을 하는 경우에는 아래의 코드로 확인할 수 있습니다.
<script>
// 객체를 생성합니다.
const object = {
name : '혼자 공부하는 자바스크립트',
price : '10000',
publisher : '한빛 미디어'
}
// 객체의 기본 속성을 지정합니다.
object.name = object.name !== undefined ? object.name : '제목 미정'
object.author = object.author !== undefined ? object.author : '저자 미정'
// 객체를 출력합니다.
console.log(JSON.stringify(object, null, 2))
</script>