2015-02-04 1 views
1

그래서이 기술은 모든 브라우저에서 전역 .remove() 메소드에 대한 대안으로 발견되었습니다.운영자 혼란 삭제

a.outerHTML =''; delete a

A = 당신의 요소입니다.

내 문제 .. 이것은 outerHTML = '';을 사용하는 경우에만 작동하기 때문에 매우 혼란 스럽습니다. 그러나 삭제 연산자는 여기에 있습니다 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete 개체에서 속성을 삭제할 때만 사용합니까? 그래서 (어리석은 질문일지도 모르겠지만) a.outerHTML을 설정하면 그것을 삭제 가능한 객체로 변환할까요? 방법?

편집 : 너무 바보 같은 소리를 할 수 있기 때문에 나는이 질문을 삭제해야처럼 거의 느낌,하지만 난 분명히 손실 오전 : P delete 연산자는 객체에서 속성을 삭제하는 것입니다

+0

'innerHTML' 속성을 지정하면 [demo] (http://jsfiddle.net/davidThomas/a9z0tzge/)가 전혀 변경되지 않습니다. –

답변

1

.

var obj = {x: true}; 
console.log(obj) // {x: true} 
delete obj.x; 
console.log(obj); // {} 
난 강력이 참조 권하고 싶습니다

: 당신의 예에서 Understanding delete


을 :

a.outerHTML =''; 
delete a; 

delete 운영자는 a.outerHTML = '';의 효과 outerHTML 라인 그와는 아무 상관이 없습니다 코드는 DOM의 일부를 새로운 HTML로 대체하기 위해 자체적으로 작동합니다. delete a을 제거하면 첫 번째 줄의 코드는 여전히 사용자가 보는 DOM에 영향을 미칩니다. ES5 엄격 모드에서 사실


:

delete a; 

은 구문 에러를 발생합니다. 그것이 행동이 의도하지 않은 방법입니다.

+0

그래,하지만 그것은 비록 당신이 outerHTML = ''할 경우, 그들은 기술적으로 객체에 맞지 않기 때문에 나를 혼란스럽게하지만 요소에서 작동합니까? 예를 들어, outerHTML = ''을 설정하지 않고 a를 삭제 한 경우 삭제되지 않습니다. 왜 그런가요? outerHTML이 그렇게 특별한 이유는 무엇입니까? 임시로 그것을 속성으로 변환 한 다음 오브젝트로 변환합니까? (그래서 delete가 작동하는 이유입니까?) –

+0

'a.outerHTML = "";'을 사용하면 그 효과는'delete' 연산자와 전혀 관련이 없습니다. 그것은 HTML 요소를 변경하여 DOM에있는 요소를 반드시 변경합니다. 이것은'x.innerHTML = "

foo
";와 유사한 방식으로'x'의 현재 자식을 제거하고 그 위치에 새로운 DOM 객체를 생성합니다. 이것의 아무 것도'delete' 연산자와 관련이 없습니다. – jfriend00

+0

@NiCkNewman : 모든 동작은'outerHTML' getter/setter에서 왔으며'delete' 키워드가 아닙니다. –