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 속성은 삭제 할 수 없습니다. 이것은
Math
,Array
,Object
와 같은 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 |