연산자 삭제는 JavaScript에서 일반적으로 사용되지 않지만 그 특성은 실제로 매우 이상합니다.
1. 객체의 속성 삭제, 코드 :
코드 사본은 다음과 같습니다.
var o = {
A : 1,
B : 2
};
OA 삭제;
경고 (OA); //한정되지 않은
그렇다면 객체의 속성 또는 객체의 속성 값이 삭제됩니까? 결과가 정의되지 않고 오류가 없기 때문에 삭제가 값이어야한다고 생각하기 시작했습니다. 그러나 사실, 내 의견은 틀렸다. 예를 들어있다.
코드 사본은 다음과 같습니다.
var o = {};
var a = {
프로 : "젠"
};
OC = A;
OC 삭제; // 객체 o의 속성 a를 삭제합니다
Console.log (OC); // 한정되지 않은
Console.log (A.Pro); // Zhenn
위의 코드를 통해 OC를 삭제 한 후 OC가 가리키는 값이 삭제되지 않음, 즉 개체 A가 여전히 존재한다는 것을 알기가 어렵지 않습니다. 이에 대해 말하면, 객체의 속성을 삭제하는 것은 실제로 객체의 속성 값에 대한 참조를 삭제하는 것과 동일하지만이 값은 여전히 객체 스택에 있습니다!
2. 배열 작동의 경우 먼저 코드를보십시오.
코드 사본은 다음과 같습니다.
var arr = [1,2,3];
ARR 삭제 [2];
Console.log (arr.length); // 3
Console.log (ARR); // [1,2, undefined]
Delete가 요소를 실제로 삭제하지 않으며 요소에 해당하는 키 값 만 삭제하는 것이 다시 입증되었습니다. 삭제의 본질을 더 이해하려면 배열의 POP 메소드와 비교하십시오. 다음과 같이 :
코드 사본은 다음과 같습니다.
var arr = [1,2,3];
arr.pop ();
Console.log (ARR); // [1,2]
Console.log (Arr.length) // 2
진실은 지금 드러나야합니다.
3. 객체와 어레이에서 위의 작업은 이해하기 쉽지만 변수의 작업은 필연적으로 이해하기 어렵습니다. 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
var a = 1;
삭제 a;
경고 (a); // 1
함수 fn () {return 42; }
fn 삭제;
경고 (fn ()); // 42
b = 2;
b 삭제 b;
경고 (b); // b는 정의되지 않았습니다.
설명하기가 어렵습니다. 또한 글로벌 변수이지만 VAR로 선언 된 변수 B는 삭제할 수 없습니다. 삭제가 매우 이상하다고 말하는 것은 불가능합니다. ECMA가 제공 한 설명에서, Var를 통해 선언 된 변수와 함수를 통해 선언 된 함수는 dontdelete 기능을 가지고 있으며 삭제할 수 없음을 의미합니다.