TIR: 완벽가이드 1. 코어자바스크립트(2) 객체 / delete, 접근자 프로퍼티- 220621

Lumpen·2022년 6월 21일
0

TIR

목록 보기
10/40

프로퍼티 삭제

delete 연산자

객체의 프로퍼티를 삭제한다
프로퍼티의 값을 지우는 것이 아니라 프로퍼티 자체를 삭제한다

상속받은 프로퍼티가 아닌 고유 프로퍼티만 지울 수 있다
상속된 것을 지우기 위해서는 해당 프로퍼티가 정의된 곳에서
-> 상속받고있는 모든 객체에 영향을 준다

delete는 삭제 성공, 프로퍼티가 존재하지 않아서 아무 일 없을 때
모두 true를 반환한다

delete 1; // true

delete 연산자는 configurable 속성이 false인 프로퍼티를 지우지 않는다
엄격모드에서 변경할 수 없는 속성을 지우려하면 TypeError 발생

delete Object.prototype; // Object.prototype는 변경할 수 없으므로 지울 수 없음
var x = 1;
delete x; // SyntaxError - this.로 한정하지 않으면 에러
delete this.x; // 전역 객체의 프로퍼티는 지울 수 없다

프로퍼티 검사

var o = { x: 1 };
'x' in o; // true
o.x !== undefined; // true - 프로퍼티의 값이 undefined가 아니라면 in 연산자 보다 효과적
'toString' in o; // true - 상속 받은 프로퍼티도 검삭
o.hasOwnProperty('toString') // false - 고유 프로퍼티만 검사

접근자 프로퍼티

getter, setter
getter 메소드만 있으면 읽기 전용
setter 메소드만 있으면 쓰기 전용 (데이터 프로퍼티는 쓰기 전용을 만들 수 없다 - 데이터 프로퍼티: 접근자 프로퍼티를 갖지 않는 객체의 프로퍼티 인듯..)

객체 리터럴로 간단히 접근자 프로퍼티 생성

// 함수 정의 function 대신 get, set을 사용한다
const p = {
  x: 1,
  y: 2,
  get getP() {
    return `x = ${this.x}, y = ${this.y}`;
  },

  set setP(value) {
    this.x += value;
    this.y += value * 2;
  },
};

console.log(p.getP); // x = 1, y = 2
p.setP = 1;
console.log(p.getP); // x = 2, y = 4
const random = {
  get randInt10() {
    return Math.floor(Math.random() * 10);
  },
};

console.log(random.randInt10);
profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글