삭제 연산자는 JavaScript에서 그다지 일반적으로 사용되지 않지만 그 특성은 참으로 매우 이상합니다.
1, 개체의 속성을 삭제합니다. 코드:
그렇다면 삭제는 객체의 속성을 삭제하는 건가요, 객체의 속성 값을 삭제하는 건가요? 결과가 정의되지 않았고 오류도 보고되지 않았기 때문에 삭제된 것이 값이어야 한다고 생각하기 시작했습니다. 하지만 사실 내 견해는 틀렸습니다. 예를 들면 다음과 같습니다.
위 코드를 통해 o.c를 삭제한 후에도 o.c가 가리키는 값은 삭제되지 않는다는 점, 즉 객체 a가 여전히 존재한다는 점을 어렵지 않게 알 수 있습니다. 그렇지 않으면 a.pro가 컴파일 수준을 통과해서는 안 됩니다. 말하자면, 삭제는 객체의 속성을 삭제한다는 것을 이해할 수 있습니다. 실제로는 객체의 속성 값에 대한 참조를 삭제하는 것과 동일하지만 이 값은 여전히 객체 스택에 있습니다!
2. 배열 작업의 경우 먼저 코드를 살펴보세요.
삭제는 실제로 요소를 삭제하는 것이 아니라 해당 요소에 해당하는 키 값만 삭제한다는 사실이 다시 한번 입증되었습니다. 삭제의 특성을 더 자세히 이해하려면 배열의 팝 메서드와 비교해 보세요. 다음과 같습니다:
이제 진실이 밝혀져야 합니다.
3. 위의 객체 및 배열 연산은 이해하기 쉽지만, 변수 연산은 필연적으로 다음과 같습니다.
설명하기가 어렵네요. var로 선언한 변수는 삭제할 수 없지만, 직접 선언한 변수 b는 삭제가 가능하다고 ECMA에서 설명을 하자면, var를 통해 선언된 변수와 function을 통해 선언된 함수에는 DontDelete 속성이 있어 삭제할 수 없다는 뜻입니다.