TIL 72 | 객체1(객체 정의, 객체 변경)

YB.J·2021년 8월 13일
0

wecode_사전스터디

목록 보기
19/22
post-thumbnail

객체의 정의, 프로퍼티와 메서드의 정의, 프로퍼티에 접근하는 두 가지 방법, 객체의 값 변경(삭제, 추가, 갱신)에 대해 적어본다

객체란❓

  • JS는 객체 기반의 프로그래밍 언어이며, 자바스크립트를 구성하는 거의 "모든 것"이 객체이다
  • 객체타입은 다양한 타입의 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조이다
  • 원시 값은 변경 불가능한 값이지만 객체 타입의 값, 즉 객체는 변경 가능한 값이다
  • 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다
    • 프로퍼티 : 객체의 상태를 나타내는 값
    • 메서드 : 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작

✨객체 생성의 다양한 방법

  • 객체 리터럴에 의한 생성
  • Object 생성자 함수
  • 생성자 함수
  • Object.create 메서드
  • 클래스(ES6)

✨프로퍼티란?

  • 객체는 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성된다
    • 프로퍼티 키 : 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
    • 프로퍼티 값 : JS에서 사용할 수 있는 모든 값
let person = {
  name: 'Lee',
  age: 20
}
  • 문자열 또는 문자열로 평가할 수 있는 표현식을 사용해 프로퍼티 키를 동적으로 생성할 수도 있다. 이 경우에는 프로퍼티 키로 사용할 표현식을 대괄호([...])로 묶어야 한다
let obj = {};
let key = 'hello'

obj[key] = 'world' // == {[key]: 'world'}
console.log(obj); // {hello: "world"}
  • 프로퍼티 키에 문자열이나 심벌 값 외의 값을 사용하면 암묵적 타입 변환을 통해 문자열이 된다
let foo = {
  0: 1,
  1: 2,
  2: 3
}

console.log(foo); // {0:1, 1:2, 2:3}
  • 이미 존재하는 프로퍼티 키를 중복 선언하면 나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어쓴다

let foo = {
  name: 'Lee',
  name: 'Kim'
}

console.log(foo); // {name: "Kim"}

✨메서드란?

  • JS에서 사용할 수 있는 모든 값은 프로퍼티 값으로 사용할 수 있다
  • 프로퍼티의 값이 함수인 경우 일반 함수와 구분하기 위해 메서드(method)라고 부른다. 메서드란 객체에 묶여 있는 함수를 의미한다.
let circle = {
  radius: 5,
  getDiameter: function() {     // <-- 메서드이다
    return 2 * this.radius;    //  <---- this는 circle을 가리킨다
   }
}

console.log(circle.getDiameter()); // 10

객체의 변경❓

✨프로퍼티에 접근(2가지 방법)

  • 마침표 표기법(dot notation)
let person = {
  name: 'Lee'
};

console.log(person.name); // Lee
  • 대괄호 표기법(bracket notation)
    • 대괄호 표기법을 사용하는 경우 대괄호 프로퍼티 접근 연산자 내부에 지정하는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다(예시1)
    • 접근 연산자 내부에 지정하는 프로퍼티 키로 변수를 지정할 때에는 꼭 대괄호 표기법을 사용하며 따옴표를 쓰지 않아도 된다(예시2)
    • 프로퍼티 키가 식별자 네이밍 규칙을 준수하지 않는 이름일 경우 대괄호 표기법만을 통해 프로퍼티에 접근할 수 있다. 프로퍼티 키가 숫자로 이루어진 경우에는 따옴표를 생략할 수 있다(예시3)
-예시1-
let person = {
  name: 'Lee'
};

console.log(person['name']); // Lee
console.log(person[name]); // 참조에러

-예시2-
let mySelf = {
  cats : ['냥순','냥돌'],
  myKey : 'Hello World'
}

let myKey = "cats"
console.log(mySelf) // {cats: ['냥순','냥돌'], myKey: 'Hello World'}

console.log(mySelf["cats"]) //  ['냥순','냥돌']

console.log(mySelf[myKey]) // ['냥순','냥돌']
>> == console.log(mySelf["cats"])  
>> !== console.log(mySelf.myKey)  // "Hello World"
            

-예시3-
let people = {
  'last-name': 'Lee',
  1: 10
}

console.log(people.last-name)  //NaN
console.log(people.'last-name') // 문법에러
console.log(people[last-name]) // 참조에러
console.log(people['last-name']) // "Lee"


console.log(people.1)  // 문법에러
console.log(people.'1')   // 문법에러
console.log(people[1]) // 10
console.log(people['1']) // 10 
  • 객체 안의 객체에 접근 : glove box의 값 출력하기

    프로퍼티들을 닷 표기법으로 연결하거나 대괄표 표기법으로 연결하거나 섞어서 연결해도 된다
    (대괄호 표기법을 꼭 사용해야 하는 경우 규칙을 지켜준다)

function accessObject() {
  let myStorage = {
    "car": {
      "inside": {
        "glove box": "maps",
        "passenger seat": "crumbs"
       },
      "outside": {
        "trunk": "jack"
      }
    }
  };
  

  let gloveBoxContents = myStorage.car.inside['glove box']
  
  return gloveBoxContents;
}

console.log(accessObject()) // "maps"
  • 객체 안의 배열에 접근 : "pine" 출력하기

    배열의 요소에 접근할 때에는 대괄호와 인덱스 번호를 사용한다

function accessArray() {
  let myPlants = [
    {
      type: "flowers",
      list: [
        "rose",
        "tulip",
        "dandelion"
      ]
    },
    {
      type: "trees",
      list: [
        "fir",
        "pine",
        "birch"
      ]
    }
  ];
  

  let foundValue = myPlants[1].list[1]
  return foundValue;
}

console.log(accessArray()) // "pine"

✨프로퍼티 값 갱신

  • 이미 존재하는 프로퍼티에 값을 할당하면 프로퍼티 값이 갱신된다
let person = {
  name: 'Lee'
}

person.name = 'Kim'
console.log(person) // {name: 'Kim'}

✨프로퍼티 동적 생성

  • 존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고 프로퍼티 값이 할당된다
let people = {
  name: 'Lee'
}

people.age = 20
console.log(people) // {name: 'Lee', age: 20}

✨프로퍼티 삭제

  • delete 연산자는 객체의 프로퍼티를 삭제한다. 이 때 delete 연산자의 피연산자는 프로퍼티 값에 접근할 수 있는 표현식이어야 한다. 만약 존재하지 않는 프로퍼티를 삭제하면 아무런 에러 없이 무시된다
let person = {
  name: 'Lee'
}

person.age = 20;
console.log(person) // {age: 20, name: 'Lee'}

delete person.age;
console.log(person) // {name: 'Lee'}

delete person.address;
console.log(person) // {name: 'Lee'}
profile
♪(^∇^*) 워-후!!(^∀^*)ノシ

0개의 댓글