남고생들의 소소한 개발 일지
Object, 참조 본문
Object
Object 객체는 객체의 가장 기본적인 형태를 가지고 있는 객체이다.
var arr = ["a", "b", "c"];
console.log('object.keys(arr)', Object.keys(arr));
// object.keys(arr) (3) ["0", "1", "2"]
var a = [1,2,3];
a.toString();
// "1,2,3"
자바스크립트의 모든 객체는 Object 객체를 상속받는다. 때문에 모든 객체는 Object 객체의 프로퍼티를 가지고 있다.
Object 객체를 확장하면 모든 객체가 접근할 수 있는 API를 만들 수 있다.
Object.prototype.contain = function(needle) {
for(var name in this) {
if(this[name] === needle) {
return true;
}
}
return false;
}
var o = {'name': 'mainbrain', 'age': 19, 'city': 'Seoul'};
console.log(o.contain('mainbrain')); // true
다음과 같이 확장 가능하지만 Object 객체는 모든 객체에 영향을 주기 때문에 확장하지 않는 것이 바람직하다.
데이터 타입
원시 데이터 타입
객체가 아닌 데이터 타입을 원시 데이터 타입(primitive type)이라고 한다.
문자열이 객체가 아닌 이유는 내부적으로 문자열이 원시 데이터 타입이고 문자열과 관련된 어떤 작업을 하려고 할 때 자바스크립트는 임시로 문자열 객체를 만들고 사용이 끝나면 제거하기 때문이다.
레퍼 객체
문자열과 관련해서 필요한 기능성을 객체지향적으로 제공해야 하는 필요가 있기 때문에 원시 데이터 형을 객체처럼 다룰 수 있도록 하기 위한 객체를 자바스크립트는 제공하고 있는데 그것이 레퍼 객체(wrapper object)다.
- 숫자 -> Number
- 문자열 -> String
- 불리언 (true/false) ->Boolean
- null -> 존재하지 않음
- undefined -> 존재하지 않음
복제
var a = 1;
var b = a;
b = 2;
console.log(a); // 1
참조
var a = {'id':1};
var b = a;
b.id = 2;
console.log(a.id); // 2
참조는 원본 파일에 대한 주소를 담아오는 것이다. 참조 덕분에 저장 장치의 용량을 절약할 수 있고, 원본 파일을 사용하고 있는 모든 복제본이 동일한 내용을 유지할 수 있게 된다.
var a = {'id':1};
function func(b) {
b = {'id':2};
}
func(a);
console.log(a.id); // 1
var a = {'id':1};
function func(b) {
b.id = 2;
}
func(a);
console.log(a.id); // 2
참고
'프로그래밍 > JavaScript' 카테고리의 다른 글
| [JS] 표준 내장 객체의 확장 (0) | 2019.11.01 |
|---|---|
| [JS] prototype (0) | 2019.10.31 |
| [JS] 상속 (0) | 2019.10.30 |
| [js]전역객체, this (0) | 2019.10.29 |
| [JS] 생성자와 NEW (0) | 2019.10.28 |