모던 자바스크립트에서 새로 얻은 지식 정리를 위한 노트입니다.
자바스크립트에는 크게 원시형 (primitive type), 객체형 (object)이 있다.
보통 개발자들이 개발할때에는 대게 객체를 상당 수 사용한다.
이 객체는 함수를 포함하거나, 다양한 변수들을 어느정도의 제약만 지켜주면 넣을수 있어서
객체 없이는 프로그래밍이 안될정도로 많이 사용하고 있다. ( 사실 함수도 객체로 이루어져있다. )
예전에 처음 js 를 배울때 "js 의 모든 것은 함수로 이루어져있다고 해도 과언이아니다" 라고 사수분으로 부터 배웠는데, 하면 할수록 느끼고있다.
암튼 객체 관련한 지식들 정리.
알고 있던것도 있지만 그래도 정확하게 이해하는것은 중요하니 메모차원에서 기록한다.
var user = {
name : "juho",
age : 25
} // 객체 정의
delete user.age; // user.age => undefined, key 도 같이 삭제됨.
var anyObj = {
for: 1,
let: 2,
var: 3,
}
var anyObj = {
a : 1,
b : "2",
c : "C",
d : undefined
}
console.log(anyObj.a); // 1
console.log(anyObj.d); // undefined
console.log('d' in anyObj) // true
=== undefined 는 데이터가 있는지 여부라면, in 은 프로퍼티의 여부이다.
우리가 사용하는 Array 는 아이템의 연속성을 보장한다. 이건 알고있었는데,
객체는 그래서 어떻게 되는건가? 라는 질문의 대한 답은 아래에있다.
var sortObj = {
"82" : "대한민국",
"44": "영국",
"41" : "스위스",
"1" : "미국"
}
for(let key in sortObj) console.log(key); // 1, 41, 44, 82
정수 프로퍼티의 경우 원시형 타입으로 변환되면서 숫자 순서대로 나열된다.
그런데, 문자열 형식일 경우 그냥 의도된 순서대로 나온다.
정수 프로퍼티도 정의한 순서대로 나오려고 하면 속임수를 쓸수있다.
....
for(let key in sortObj)
console.log(+key);
// + 를 붙이면, 정수로 변환한다는 의미고 그건 곧 key 가 정수가 아니라는 뜻이다.
간단하게 객체 비교 정리해보면,
let objA = {
a : 1,
b : 2
}
let objB = objA;
console.log(objA === objB); // true
let objC = {
a : 1,
b : 2
}
console.log(objA === objC); // false
let objD = Object.assign({}, objA);
console.log(objA === objD); // true
위 경우는 조금만 js를 사용한 개발자라면 아는사실이다. 객체는 참조라는 개념이있으며,
각 객체마다 메모리주소값이 다르기에 발생하는 문제다.
위에 마지막 문단처럼 Object.assign 함수를 사용하면 완벽하게 객체가 복사된다.