1. 객체 (Object)
JavaScript는 객체(Object) 기반의 스크립트 언어이며, 기본 자료형을 제외한 나머지 값들 (함수, 배열, 정규표현식)은 모두 객체.
데이터와 그 데이터와 관련된 동작(절차, 방법, 기능)을 모두 포함할 수 있는 개념적 존재.
키(key)와 값(value)로 구성된 데이터를 의미하는 프로퍼티(property)와 동작을 나타내는 메소드(method)로 구성된 집합이며, 배열과 달리 구성 요소들의 순서를 보장하지 않음.
객체지향의 상속을 구현하기 위해 "프로토 타입" 이라는 객체의 프로퍼티와 메소드를 상속 받을 수 있음.
1.1 프로퍼티 (Property)
1.2 메소드 (Method)
2. 객체 생성 방법
2.1 객체 리터럴
var Object = {};
console.log(typeof Object);
2.2 Object() 생성자 함수
var Car = new Object();
Car.name = 'audi a8';
2.3 생성자 함수
function person (name, age){
this.name = name;
this.age = age;
this.say = function(){
console.log('I am korea idol')
}
}
var person1 = new person('da hyun', '1998 .5 .28');
var person2 = new person('luda', '1997 .3 .6');
3. 객체 프로퍼티의 접근
3.1 프로퍼티의 이름
var person = {
name: 'J',
gender: 'male',
say: function () {
console.log('Hi! My name is ' + this.name);
},
1 : 1,
'2' : 2
};
console.log (typeof person) // Object
console.log (typeof person.name) // string
console.log (typeof person.say) // function
console.log (typeof person["1"]) // number
console.log (typeof person[1]) // number
console.log (typeof person[2]) // number
3.2 프로퍼티 값 읽기
var person = {
name: 'J',
gender: 'male',
say: function () {
console.log('Hi! My name is ' + this.name);
},
1 : 1,
'2' : 2
};
console.log(person); // {1: 1, 2: 2, name: "J", gender: "male", say: ƒ}
console.log(person.name); // J
console.log(person[name]); // undefined
console.log(person["name"]); // J
3.3 프로퍼티 값 갱신
var person = {
name: 'J',
gender: 'male',
say: function () {
console.log('Hi! My name is ' + this.name);
},
1 : 1,
'2' : 2
};
person['name'] = 'Junho';
console.log(person['name']) // Junho
3.4 프로퍼티 동적 생성
var person = {
name: 'J',
gender: 'male',
say: function () {
console.log('Hi! My name is ' + this.name);
},
1 : 1,
'2' : 2
};
person['age']='20';
console.log(person) // {1: 1, 2: 2, name: "J", gender: "male", say: ƒ, age: "20"}
console.log(person['age']); // 20
3.5 프로퍼티 삭제
var person = {
name: 'J',
gender: 'male',
say: function () {
console.log('Hi! My name is ' + this.name);
},
1 : 1,
'2' : 2
};
delete person.age // true
console.log(person) // {1: 1, 2: 2, name: "J", gender: "male", say: ƒ}
3.6 for - in 문
var numbers = {
'1':'11',
'2':'22',
'3':'33',
'4':'44',
'5':'55',
}
for (var i in numbers){
console.log(i);
}
/* key 값이 반환
1
2
3
4
5
*/
var arrayNumber = [1,2,3,4,5]
for (var i in arrayNumber){
console.log(i)
}
/*
0
1
2
3
4
*/
순서가 보장되지 않는 for-in을 보안하기 위해, ES6에서 for-of 가 추가됨.
var arrayNumber = [1,2,3,4,5]
for (const [index, value] of arrayNumber.entries()){
console.log('index :'+index, 'value: '+value)
}
/*
index :0 value: 1
index :1 value: 2
index :2 value: 3
index :3 value: 4
index :4 value: 5*/
4. Pass-by-reference
var num1 = {
val : 20
}
var num2 = num1;
console.log(num1.val, num2.val); // 20 20
console.log(num1 === num2); // true
num2.val = 30;
console.log(num1.val, num2.val) // 30 30
객체 리터럴 방식으로 num1을 생성. 변수 num1은 객체 자체를 저장하는 것이 아니라, 생성된 객체의 참조 값을 저장.
변수 num2에 변수 num1의 값을 할당.
변수 num1의 값은 생성된 객체를 가르키는 참조값이므로 변수 num2에도 같은 참조값이 저장 됨으로 num1과 num2 둘다 동일한 객체를 참조하고 있음.
5. Pass-by-value
기본자료형의 값은 값(value)으로 전달. 즉 값이 복사되어 전달.
기본 자료형은 값이 한번 정해지면 변경할 수 없으며 이들 값은 런타임(변수 할당 시점)에 메모리의 스택 영역에 고정된 메모리 영역을 점유함.
var num1 = 1;
var num2 = num1;
console.log(num1, num2); // 1 1
console.log(num1 === num2); // true
num1 = 30;
console.log(num1, num2) // 30 1
'4. Programming > 4.3 JavaScript' 카테고리의 다른 글
7. Function (함수) (0) | 2018.07.15 |
---|---|
6. Immutability (객체와 변경불가성) (0) | 2018.07.13 |
4. 제어문 (Control flow statement) (0) | 2018.05.28 |
3. Operator (연산자) (0) | 2018.05.12 |
2. variable (변수) (0) | 2018.04.25 |