자바스크립트 객체
// 객체 생성
1. let foo = new Object;
2. let foo = {};
3. let foo = {
name : 'foo',
major : "computer science"
};
// 객체 프로퍼티 읽기
alert(foo.name); // foo
alert(foo.major); // computer science
// 객체 프로퍼티 갱신
foo.major = 'electronics engineering';
// 객체 프로퍼티 동적 생성
foo.age = 30; // 객체 프로퍼티 생성
// 대괄호 표기법을 사용할 경우
foo.['age'] = 30; // 대괄호 안에 반드시 작은따옴표나 큰따옴표가 있어야 한다.
alert(foo['age']); // 30
- 대괄호 표현법을 사용해야 되는 경우
- 접근하려는 프로퍼티가 표현식(- 이 있는 표현식)이거나 두 단어 문자, 예약어일 경우 대괄호 표현법을 사용해야 한다. 또한 다른 변수에 값을 담아 사용할 경우 대괄호 표현법을 사용한다.
객체 프로퍼티 삭제
let foo = {
name : 'foo',
major : "computer science"
};
alert(foo.name); // foo
delete foo.name;
alert(foo.name); // undefined
- 자바스크립트에서는 delete 연산자는 프로퍼티를 삭제할 뿐, 객체 자체는 삭제할 수 없다.
- 자바스크립트에서는 기본 타입인 숫자, 문자열, 불린값, null, undefined 5가지를 제외한 모든 값은 객체다. (배열, 함수 또한 객체라고 부른다.)
- 자바스크립트에서 객체를 참조 타입이라고 부른다.
- 동등 연산자 == 를 사용하여 객체를 비교할 경우 프로퍼티 값을 비교하는 게 아닌 참조 값을 비교한다.
- 참조에 의한 호출 방식
- 기본 타입의 값 : 복사된 값이 전달 call by value방식 (함수 내부에서 매개변수를 이용해 값을 변경해도, 실제로 호출된 변수의 값이 변경되지 않는다.)
- 객체와 같은 참조 타입 : 함수를 호출할 때 인자로 참조 타입인 객체를 전달할 경우, 객체의 프로퍼티 값이 함수의 매개변수로 복사되지 않고, 인자로 넘긴 객체의 참조 값이 그대로 함수 내부로 전달된다. call by reference방식 (즉 함수 내부에서 참조 값을 이용해서 인자로 넘긴 실제 객체의 값을 변경할 수 있다.
- 자바스크립트의 모든 객체는 자신의 부모 역할을 하는 객체와 연결되어 있다 이것을 프로토타입 객체라 한다.
배열
- 배열 리터럴은 대괄호[]를 사용한다.
- 자바스크립트 배열은 값을 순차적으로 넣을 필요 없이 아무 인덱스 위치에나 값을 동적으로 추가할 수 있다.
- push() 메서드는 값을 배열의 끝에 추가하는 메서드이다.
- 배열에서는 delete를 사용하면 배열 안에 값만 삭제되고 길이는 삭제되지 않는다.(값은 undefined가 된다.)
- 자바스크립트에서 length 프로퍼티를 가직 객체를 유사 배열 객체(array-like objects)라고 부른다.