javascript basics #1 오브젝트
자바스크립트의 데이터 타입을 크게 나누자면 7가지의 primitive
타입(undefined
, null
, boolean
, string
, number
, bigint
, symbol
)과 object
가 있다.
primitive
타입은 근본적인 데이터 타입으로 더 이상 아랫 단계로 내려갈 수 없는 말하자면 원자 타입이다. java와 비교하자면, java 언어에서는 boolean
, byte
, short
, int
, long
, float
, double
, char
가 존재하는데, javascript 언어에서는 다양한 표현의 숫자들이 number
로 간소화되며, char
대신 string
이 있다.
그리고 자바스크립트에만 존재하는 특수한 타입인 undefined
, null
, bigint
, symbol
이 있다.
primitive
타입의 변수는 오직 한 종류의 값만 다룬다.
반면, 오브젝트는 다양하고 복잡한 데이터를 key-value
형태로 보관한다. 자바스크립트에서 오브젝트는 가히 어떠한 것이든 표현 가능한 데이터 타입이다. 자바스크립트를 깊게 이해하기 위해서는 오브젝트에 대한 공부가 필수적이다.
오브젝트는 {...}
기호를 이용해 생성 가능하다. 정확히는 {Key : Value}
의 형태로 만들어주면 된다. 여기서 Key
부분에는 문자열이 와야 하고, Value
부분에는 어떠한 값이 와도 무방하다.
오브젝트에서는 Key
를 이용해서 내가 저장해뒀던 값을 빠르게 인출할 수 있다.
let objectExample = {
"key": "value",
"number": 1,
"undefined": undefined
// whatever in javascript can be inserted as a value.
}
추가하는 방법은 처음에 오브젝트 생성 시에 추가하는 방법과 생성 이후에 추가하는 방법이 있다.
let objectExample = {
"key1": "value"
}
objectExample.key2 = "value";
delete
키워드를 이용해 삭제 가능하다.
delete objectExample.key2;
프로퍼티란 오브젝트의
key
라고 보면 된다.
const
키워드는 어떠한 상수를 선언할 때 사용된다. 그런데, 오브젝트를 const
키워드로 선언하게 되면? 신기하게 수정이 된다.
단, const
키워드로 선언된 오브젝트의 프로퍼티를 수정하는 것이 아니라, 내용 자체를 다른 변수로 지정하는 것은 금지되어 있다.
오브젝트의 key
값으로는 문자열이 들어갈 수 있다. 문자열이 들어갈 수 있다는 것은 띄어쓰기도 가능하다는 뜻이다. 단, 띄어쓰기를 할 때는 위에서 접근했던 방식과 같이 .
을 이용한 접근을 할 때는 띄어쓰기나 특수 기호를 이용하는 것이 불가능하다.
이를테면,
objectExample.who i am = "jake"; // ERROR
위와 같은 접근은 에러가 발생한다.
objectExample["who i am"] = "jake"; // SUCCESS
위와 같이 []
기호를 이용해 접근하면 띄어쓰기나 특수 기호를 이용한 key
값 할당도 가능하다.
Computed Properties란, 변수 값을 이용하여 오브젝트의 key
값을 할당하는 것을 말한다.
이를테면,
let keyName = "language";
let objectExample = {
[keyName] = "javascript"
}
위와 같이 선언한다면,
let objectExample = {
"language" = "javascript"
}
위와 같은 효과를 얻게 된다. 이를 응용하면
let keyName = "language";
let objectExample = {
["the best " + keyName] = "javascript"
}
위와 같은 것도 가능한데,
let objectExample = {
"the best language" = "javascript"
}
위와 같은 효과를 갖는다.
프로퍼티 축약이란 오브젝트의 key
값과 동일한 변수명을 갖고 있을 때, 따로 value
를 적어주지 않아도 value
에 자동으로 동일한 변수명을 삽입해주는 것이다.
이를테면,
let key1 = "Hi";
let objectExample = {
key1
}
위와 같이 선언하면, objectExample
의 key1
에 대한 value
값이 자동으로 "Hi"
라는 문자열이 들어간다.
__proto__
라는 이름으로는 올 수 없다. 이 공간은 프로토타입이 사용할 공간으로 예약되어있기 때문이다.
반면, for
, let
, return
과 같이 기존 자바스크립트의 예약어로 key
를 설정하는 것은 가능하다.
어떤 오브젝트에 해당 프로퍼티가 존재하는지 확인하기 위해서는 in
연산자를 사용하면 된다.
존재하지 않는 프로퍼티를 참조할 때, 자바스크립트는 오직 undefined
를 리턴할 뿐 에러메세지를 띄우지 않는다는 것을 알아둬야 한다.
오브젝트의 모든 키를 순회하기 위해 특이한 방식의 반복문이 있는데 그게 바로 for...in
이다.
for(key in object) {
// 실행할 내용을 입력하면 된다.
}
모든 key
와 그 안에 있는 값을 볼 수 있다.
정수의 경우에는 오름차순으로 정렬되며, 다른 자료형의 경우에는 프로퍼티가 추가된 순서를 따른다.
숫자로 key를 지정한 경우에는 잘 정렬된다.
알파벳으로 key를 지정한 경우에는 삽입된 순서대로 정렬된다.
섞인 경우에는 숫자만 제대로 정렬된다.