JavaScript_javascript 팁의 이상한 삭제 연산자

WBOY
풀어 주다: 2016-05-16 16:09:56
원래의
1112명이 탐색했습니다.

삭제 연산자는 JavaScript에서 그다지 일반적으로 사용되지 않지만 그 특성은 참으로 매우 이상합니다.

1, 개체의 속성을 삭제합니다. 코드:

코드 복사 코드는 다음과 같습니다.

var o = {
답: 1,
b: 2
};
o.a 삭제;
경고(o.a); //정의되지 않음

그렇다면 삭제는 객체의 속성을 삭제하는 건가요, 객체의 속성 값을 삭제하는 건가요? 결과가 정의되지 않았고 오류도 보고되지 않았기 때문에 삭제된 것이 값이어야 한다고 생각하기 시작했습니다. 하지만 사실 내 견해는 틀렸습니다. 예를 들면 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

var o = {};
var a = {
프로: "zhenn"
};
o.c = a;
delete o.c; //객체 o의 속성 a
를 삭제합니다. console.log(o.c); // 정의되지 않음
console.log(a.pro); //젠

위 코드를 통해 o.c를 삭제한 후에도 o.c가 가리키는 값은 삭제되지 않는다는 점, 즉 객체 a가 여전히 존재한다는 점을 어렵지 않게 알 수 있습니다. 그렇지 않으면 a.pro가 컴파일 수준을 통과해서는 안 됩니다. 말하자면, 삭제는 객체의 속성을 삭제한다는 것을 이해할 수 있습니다. 실제로는 객체의 속성 값에 대한 참조를 삭제하는 것과 동일하지만 이 값은 여전히 ​​객체 스택에 있습니다!

2. 배열 작업의 경우 먼저 코드를 살펴보세요.

코드 복사 코드는 다음과 같습니다.

var arr = [1,2,3];
arr[2] 삭제;
console.log(arr.length) // 3
console.log(arr); // [1,2,정의되지 않음]

삭제는 실제로 요소를 삭제하는 것이 아니라 해당 요소에 해당하는 키 값만 삭제한다는 사실이 다시 한번 입증되었습니다. 삭제의 특성을 더 자세히 이해하려면 배열의 팝 메서드와 비교해 보세요. 다음과 같습니다:

코드 복사 코드는 다음과 같습니다.

var arr = [1,2,3];
arr.pop();
console.log(arr) // [1,2]
console.log(arr.length) // 2

이제 진실이 밝혀져야 합니다.

3. 위의 객체 및 배열 연산은 이해하기 쉽지만, 변수 연산은 필연적으로 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

var a = 1;
삭제;
경고(a); // 1

함수 fn(){ 반환 42 }
fn 삭제;
경고(fn()); // 42

b = 2;
b 삭제;
경고(b); // b는 정의되지 않았습니다.

설명하기가 어렵네요. var로 선언한 변수는 삭제할 수 없지만, 직접 선언한 변수 b는 삭제가 가능하다고 ECMA에서 설명을 하자면, var를 통해 선언된 변수와 function을 통해 선언된 함수에는 DontDelete 속성이 있어 삭제할 수 없다는 뜻입니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿