에 객체의 참조를 밀기 :나는이 같은 상황에서 볼 수 있듯이 지금까지 배열
var x = [];
var y = {};
y.someProp='asd';
이 나던 작품은 :
x.push(y);
내가하고 싶은 것은의 참조를 추가입니다 y를 x로 설정하면 나중에 "y를 삭제"합니다. 배열 x에서 제거되기를 원한다.
에 객체의 참조를 밀기 :나는이 같은 상황에서 볼 수 있듯이 지금까지 배열
var x = [];
var y = {};
y.someProp='asd';
이 나던 작품은 :
x.push(y);
내가하고 싶은 것은의 참조를 추가입니다 y를 x로 설정하면 나중에 "y를 삭제"합니다. 배열 x에서 제거되기를 원한다.
변수, 참조 및 개체가 혼합되어 있습니다.
Doing delete y;
은 변수 y를 제거합니다. 변수는 더 이상 존재하지 않으므로 더 이상 값을 갖지 않습니다. 따라서 변수에 포함 된 참조가 없어졌습니다.
그러나 변수를 제거해도 참조하는 개체가 제거되지는 않습니다. 배열에는 여전히 객체에 대한 참조가 포함되어 있으며 변수의 존재 여부에 의존하지도 않습니다.
실제로 개체를 직접 제거 할 수있는 방법은 없습니다. 당신은 객체에 대한 모든 참조를 파괴함으로써 객체를 제거합니다. 개체가 참조를 제거하도록하고 싶습니다. 단순히 참조의 참조가 작동하는 방식이 아닙니다.
그건 어떻게 delete
작동하지 않습니다. 동일한 객체에 대한 다른 참조가 아니라 객체 참조를 전달합니다. 당신은 여기 "약한 참조"와 같은 것을 찾고 있는데 JavaScript로 구현하는 방법을 모르고 있습니다.
도움이 되셨습니까?
Var x=[{}]; var y=x[0];
편집 : 미안 해요, 난 조금 응답에서 내 첫 번째 시도에서 간단한이었다. 내가 무엇을 묻기 시작할 것인가? 배열 외부에 "존재"할 필요가있는 이유는 무엇입니까? 당신은 단지 객체의 배열을 생성하고 delete 또는 array.splice()를 사용하여 필요할 때 객체를 제거 할 수 있습니까?
둘째, 배열 외부에 y가 있어야하는 경우 배열 인덱스를 참조하는 속성을 만들거나 올바른 개체 참조를 찾기 위해 배열을 검색 할 수있는 유틸리티 함수를 만듭니다. 제거. 다른 말로하면,
var x=[]; var y={}; y.arrayIndex=(x.push(y)-1);
// later on, you want to get rid of y
delete x[y.arrayIndex]; delete y;
이 나던 작업 : 그것은 않습니다 물론
x.push(y);
, 그것은 의도 한대로 정확히 작동합니다 - 당신이 만든 배열의 값 y를 밀어.
연산자는 특히 개체의 속성을 삭제하기위한 연산자입니다. 연산자 뒤에 나오는식이 속성으로 해석되지 않으면 전혀 발생하지 않습니다.
var y = {"someprop":true};
delete y;
alert(y.someprop); // alerts "true"
하는 브라우저 창에서 그것을 시도, 당신의 주소 표시 줄에 다음을 붙여 Enter 키를 누르십시오 :
javascript:var y = {"someprop":true}; delete y; alert(y.someprop);
감사합니다. 새로 푸시 된 요소의 인덱스를 얻을 수있는 방법이 있습니까? – intacto
@intacto :'push()'는 배열의 끝 부분에 요소를 추가하고 반환 값은 새로운 길이이므로 하나의 요소 만 추가하면 인덱스는 항상'array.push (item) - 1'이됩니다. 'var index = x.push (y) - 1;' –
객체의 이벤트에서 객체에 대한 참조를 제거 할 수 있다면 충분할 것입니다. 개체에 대한 참조를 어떻게 든 전달할 수 있습니까? – intacto
@Guffa,'delete y'는'y'가'this.y' 일 때 전역 문맥에서만 작동합니다. 읽기 : http://perfectionkills.com/understanding-delete/ – James
@intacto : 개체가 배열에서 참조를 제거 할 수있게하려면 개체는 참조를 포함하는 모든 배열에 대한 참조를 포함해야합니다 . 따라서 배열에 객체를 추가 할 때 객체에 배열을 추가해야합니다. – Guffa