Roothyo
루시오의 Devlog
Roothyo
전체 방문자
오늘
어제
  • 분류 전체보기 (92)
    • ComputerScience (56)
      • 자료구조 (1)
      • 알고리즘 (6)
      • 네트워크 (12)
      • 코딩테스트 (34)
      • AI & ML (1)
      • BlockChain (1)
      • Security (1)
    • Programming Language (8)
      • JavaScript (8)
      • Python (0)
    • 서비스개발(Web, App) (18)
      • Front-End (2)
      • Back-End (8)
      • Cloud Server (2)
      • DevOps (4)
    • 프로젝트 (9)
      • UNY (4)
      • ThrowOrNot (4)
      • MoA (1)
    • 잡담 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Node
  • chat
  • nodejs
  • Socket.io
  • github
  • 네트워크공부
  • VPAID
  • vmap
  • Vast
  • TLS
  • 비디오광고
  • FRONT-END
  • Python
  • 네트워크
  • 코딩테스트
  • 백준
  • node.js
  • 알고리즘
  • Nest.js
  • 애자일프로젝트
  • OpenVidu
  • Python3
  • 완전탐색
  • Redis
  • 프로그래머스
  • 클라우드서버
  • js
  • level2
  • JavaScript
  • 코테

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Roothyo

루시오의 Devlog

Programming Language/JavaScript

JavaScript - 객체(Object)

2022. 7. 5. 17:12

Object 클래스는 JavaScript의 데이터 유형중 하나입니다. 다양한 키 모음 및 더 복잡한 엔티티들을 저장하는데 사용됩니다. 

JavaScript의 거의 모든 객체는 Object의 인스턴스입니다.일반적인 객체는 Object.prototype에서 속성을 상속하지만, 이러한 속성들은 가려지거나 재정의 될 수 있습니다. 

 

Object 생성자는 주어진 값에 대한 객체 Rapper를 생성합니다.

  • 값이 null 또는 undefined이면 빈 객체를 생성하여 반환합니다.
  • 그렇지 않으면 주어진 값에 해당하는 타입의 객체를 반환합니다.
  • 값이 이미 객체인 경우 그 값을 반환합니다.

생성자가 아닌 맥락에서 호출될 때 Object는 new Object()와 동일하게 작동합니다. 

객체 리터럴 표기법 vs JSON(JavaScript Object Notation)
객체 리터럴 표기법은 JSON과 동일하지 않습니다. 비슷하게 보이지만 다음의 차이를 갖습니다.
- JSON은 오직 "property" : value 구문을 사용해 정의한 프로퍼티만 사용합니다.
- JSON에서 값은 문자열, 숫자, 배열, true, false, null, 또는 다른 객체만 사용할 수 있습니다.
- 함수 값(메소드)은 JSON의 값으로 할당할 수 없습니다.
- Date와 같은 객체는 JSON.parse() 이후의 문자열이 됩니다.
- JSON.parse()는 계산된 프로퍼티명을 거부하며 에러가 발생합니다.  

 

메소드 정의

객체의 프로퍼티는 function, getter, setter 메소드를 참조할 수도 있습니다.

let o = {
  property: function (parameters) {},
  get property() {},
  set property(value) {}
}

 

계산된 프로퍼티명

: ECMAScript 2015부터 객체 초기자 구문은 계산된 프로퍼티 명도 지원합니다. 대괄호 [] 안에서 표현식을 허용하며, 표현식은 프로퍼티 명으로 계산되어 사용됩니다.

// 계산된 프로퍼티명(ES2015)
let i = 0
let a = {
  ['foo' + ++i]: i,
  ['foo' + ++i]: i,
  ['foo' + ++i]: i
}

console.log(a.foo1) // 1
console.log(a.foo2) // 2
console.log(a.foo3) // 3

const items = ["A","B","C"];
const obj = {
[items]: "Hello"
}
console.log(obj); // A,B,C: "Hello"
console.log(obj["A,B,C"]) // "Hello"

let param = 'size'
let config = {
  [param]: 12,
  ['mobile' + param.charAt(0).toUpperCase() + param.slice(1)]: 4
}

console.log(config) // {size: 12, mobileSize: 4}

 

전개 프로퍼티

: ECMAScript의 전개 프로퍼티는 제공된 객체로부터 새로운 객체로 자신만의 열거형 프로퍼티를 복사합니다.

Object.assign() 보다 더 짧은 구문을 사용해 얕은 복제(prototype 제외) 또는 객체 병합이 가능합니다.

(*Object.assign()은 setters를 트리거하는 반면 전개 연산자는 그렇지 않음을 유의할 것!)

let obj1 = { foo: 'bar', x: 42 }
let obj2 = { foo: 'baz', y: 13 }

let clonedObj = { ...obj1 }
// Object { foo: "bar", x: 42 }

let mergedObj = { ...obj1, ...obj2 }
// Object { foo: "baz", x: 42, y: 13 }

 

프로토타입 변형

: __proto__ : value 도는 "__proto__" : value 형태의 프로토타입 정의는 __proto__ 이름을 갖는 프로퍼티를 생성하는 것 대신 제공된 값이 객체 또는 null인 경우, 생성된 객체의 [[Prototype]]을 해당 값으로 변경합니다.

 

정적 메소드 

  • Object.assign() : 하나 이상의 원본 객체들로부터 모든 열거 가능한 속성들을 대상 객체로 복사.
  • Object.create() : 지정한 프로토타입의 객체 및 속성을 갖고 있는 새 객체를 생성합니다.
  • Object.defineProperty() : 지정한 서술자에서 서술한 속성을 객체에 추가합니다.
  • Object.defineProperties() : 지정한 서술자들에게 서술한 속성들을 객체에 추가합니다.
  • Object.entries() : 지정한 객체 자신의 모든 열거 가능한 문자열 속성들의 [key, value] 쌍으로 구성된 배열을 반환합니다. 
  • Object.freeze() : 객체를 고정합니다. 다른 곳의 코드에서 해당 속성을 삭제하거나 변경할 수 없게 됩니다.
  • Object.fromEntries() : [key, value] 쌍의 iterable로부터 새 객체를 반환합니다.
const entries = new Map([
  ['foo', 'bar'],
  ['baz', 42]
]);

const obj = Object.fromEntries(entries);

console.log(obj);
// expected output: Object { foo: "bar", baz: 42 }
  • Object.is() : 두 값이 같은지를 비교합니다. 모든 NaN 값을 같다고 처리합니다.
  • Object.getOwnPropertyNames() : 지정한 객체 자신의 모든 열거 가능하거나 불가능한 속성들의 이름으로 구성된 배열을 반환합니다.
  • Object.keys() : 지정한 객체 자신의 모든 열거 가능한 문자열 속성들의 이름으로 구성된 배열을 반환합니다.
  • Object.values() : 지정한 객체 자신의 모든 열거 가능한 문자열 속성에 해당하는 값들로 구성된 배열을 반환합니다.

 

직접 Docs를 보지 않으면 JSON과의 차이를 충분히 모를 수도 있겠다 싶다. 일반적인 웹 개발등의 작업을 할때 필요하지 않지만, 더 깊은 개발에 대한 이해와 좋은 효율을 지향한다면 봐야할 내용인 것 같다. 다음은 학부생 시절 코딩테스트를 진행하면서 헷갈려했던 this에 대해 정리하려고 한다.

 

[출처 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Object_initializer]

'Programming Language > JavaScript' 카테고리의 다른 글

JavaScript - 가비지 컬렉션(Garbage Collection)  (0) 2022.07.08
JavaScript - 클로저(Closure)  (0) 2022.07.07
JavaScript - 변수(Variable)  (0) 2022.07.07
JavaScript - 콜백 함수(Callback)  (0) 2022.07.06
JavaScript - 함수  (0) 2022.07.04
    'Programming Language/JavaScript' 카테고리의 다른 글
    • JavaScript - 클로저(Closure)
    • JavaScript - 변수(Variable)
    • JavaScript - 콜백 함수(Callback)
    • JavaScript - 함수
    Roothyo
    Roothyo
    개발 관련 지식 포스팅/ 잡담 블로그 입니다. 반갑습니다! (github : https://github.com/geun9716)

    티스토리툴바