1. 구문
삭제 후의 표현식은
var o = {a:1}; delete o.a; o.a는 객체 o의 속성 a에 대한 참조입니다.
별도의 속성 이름은 with 문에서만 사용할 수 있습니다.
with(o){
delete a
}
2. 삭제 값
delete는 일반 연산자이며 true 또는 false를 반환합니다. 규칙은 삭제된 개체의 속성이 존재하고 삭제할 수 없는 경우 false를 반환하고, 그렇지 않으면 true를 반환하는 것입니다. 여기서 한 가지 특징은 객체 속성이 존재하지 않는 경우에도 true를 반환하므로 반환 값이 삭제 성공 여부와 완전히 동일하지는 않습니다.
var o = {a:1};
delete o.a; //return true
var b = 2;
delete b;//return false, ECMA 규칙 규칙: var 및 함수를 사용하여 선언된 변수는 삭제할 수 없습니다.
3. 삭제가 허용되지 않는 경우
위 예시에서 언급한 var 및 function으로 선언한 변수는 삭제할 수 없으나 암시적 선언은 삭제할 수 있습니다
function c(){return 12;}
delete c ;//return false
d = function(){return 12;}
delete d;//return true
프로토타입 체인에서 상속된 속성은 삭제할 수 없지만 삭제할 수는 있습니다. 프로토타입 체인의 속성 삭제
function Foo( ){}
Foo.prototype .bar = 42;
var foo = new Foo();
delete foo.bar; // true를 반환하지만 효과가 없습니다.
alert(foo.bar ); // 경고 42, 속성이 상속되었습니다.
delete Foo.prototype.bar; // 프로토타입의 속성 표시줄을 삭제합니다.
alert(foo.bar) // "정의되지 않음" 속성이 있음을 경고합니다. 더 이상 존재하며 상속할 수 없습니다
4. 특수한 경우
eval이 실행한 코드에 var, function을 통해 선언한 변수가 있으면 삭제할 수 있습니다.
eval("var a=1"); 🎜>delete a;
alert(a); //정의되지 않은 오류 보고
평가 실행 코드의 클로저 내부에 선언이 이루어진 경우 변수를 삭제할 수 없습니다.
eval(" (function(){var a=1;delete a ; return a;})()");//1
5. 배열 요소 삭제
에서 해당 요소 삭제 배열은 배열의 길이에 영향을 미치지 않습니다
delete arr[0];
alert(arr.length);//alert 3
삭제된 키 값은 더 이상 배열에 속하지 않지만 계속 액세스할 수 있으며 해당 값은 정의되지 않습니다.
delete arr[0];
0 in arr; // false
alert(arr[0]) //정의되지 않음
arr[0] == = 정의되지 않음; //true
키 값을 정의되지 않은
arr[0] =
0 in arr; true
alert(arr [0]);//undefine
arr[0] === undefine;//true
삭제 작업은 해당 항목만 삭제하는 것을 볼 수 있습니다. 배열의 키 값 속성이기도 합니다. 이 상황은 이해하기 쉽습니다. 키 값을 유지해야 하는 경우 정의되지 않은 할당을 사용할 수 있습니다.