본문 바로가기

Programing/JavaScript

delete operator // 객체에서 삭제

delete operator

- 문법

delete expression 

expression은 속성 레퍼런스여야만 한다. e.g.:

delete object.property delete object['property']

파라미터

object오브젝트의 이름. 또는 오브젝트 표현식.property삭제하고자 하는 속성

리턴 값섹션

non-configurable 속성(역: 속성을 제거할 수 있는지)인 경우를 제외하고는 모든 경우에 관하여 true이다. non-configurable 속성인 경우는 non-strict에서 false를 반환한다.

예외섹션

non-configurable속성인 경우에  strict mode에서 Global_objects/SyntaxError를 낸다.

설명섹션

일반적으로 생각하고 있는것과는 다르게 delete 는 메모리 해제에 관하여 직접적으로 어떠한 작업도 하지 않습니다. 메모리 관리는 breaking references를 통하여 간접적으로 일어납니다. 자세한 걸 알고 싶다면 memory management 를 보세요.

delete연산자는 오브젝트로 부터 해당 프로퍼티를 삭제합니다. 삭제를 하면 true를 반환, 아니면 false를 반환합니다. 그렇지만 아래 경우를 고려해야만 합니다. 

  • 만약 존재하지 않는 속성을 삭제하려고 하면 delete는 어떠한 작업도 없이 true를 반환합니다.
  • 오브젝트의 프로토타입 체인에 같은 이름의 속성이 있다면, 삭제 후에,  오브젝트의 프로토타입체인을 통해 프로퍼티를 사용 할 수 있습니다. (즉, delete는 오직 자신의 프로퍼티만 삭제 합니다.
  • var로 선언된 어떠한 프로퍼티라도 글로벌 스코프나 펑션 스코프로부터 삭제될 수 없습니다.
    • 결국, delete는 글로벌 스코프의 어떤 함수도 삭제 할 수 없습니다. (함수 정의 또는 함수 표현식인지 여부에 따라서)
    • 오브젝트의 속성으로 있는 함수인 경우(글로벌 스코프를 제외하고)는 delete로 삭제할 수 있습니다.
  • let과 const로 선언한 속성은 어느 스코프에 정의되어 있건 삭제 할 수 없습니다.
  • Non-configurable 속성은 삭제 할 수 없습니다. 이것은  MathArrayObject와 같은 built-in objects의 속성들이나 Object.defineProperty() 같은 메소드로 만든 non-configurable속성들을 포함합니다.

간단한 예제입니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var Employee = {
  age: 28,
  name'abc',
  designation: 'developer'
}
 
console.log(delete Employee.name);   // returns true
console.log(delete Employee.age);   // returns true
 
console.log(Employee.name); // returns undefined name 값이 삭제된 
 
// 아래 프로퍼티를 삭제하려고 시도하면
// 존재하지 않아 true를 리턴합니다.
console.log(delete Employee.salary); // returns true
 
 
 
console.log(Employee); // Object { designation: "developer" }
cs

 

 

 

출처 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/delete

 

 

'Programing > JavaScript' 카테고리의 다른 글

Number  (0) 2019.01.24
Array .isArray () // 배열인지 ?  (0) 2019.01.23
JavaScript : Scope 이해  (0) 2019.01.23
논리연산자  (0) 2019.01.23
Truthy and Falsy Values in JavaScript  (0) 2019.01.23