code

IE에서 창 속성 삭제

codestyles 2020. 11. 21. 14:06
반응형

IE에서 창 속성 삭제


이 문제에 대한 정보를 찾을 수 없습니다. IE에서 다음 코드가 작동하지 않는 이유는 무엇입니까?

window.x = 45;
delete window.x;
// or delete window['x'];

IE는 "개체가이 작업을 지원하지 않습니다"오류를보고합니다. IE 문제에서 창 속성을 반복하는 것과 관련이 있습니까?


나는 이렇게 할 것이다 :

    window[x] = undefined;
    try{
        delete window[x];
    }catch(e){}

Gasper는 그가 완성한 해결책에 대해 의견을 남겼지 만 실제 대답으로 그 가치가 있다고 생각합니다.

try 
{ 
    delete window.x; 
} 
catch(e) 
{ 
    window["x"] = undefined; 
}

흥미로운 문제, 나는 오늘 밤 그것에 머리를 두드리는 중이었습니다. IE에서는 예외가 발생하지만 Firefox에서는 발생하지 않습니다. 이 해결 방법은 메모리 누수를 의심 할 것이므로 아껴서 사용하십시오.

왜 undefined를 할당하지 않습니까? 나중에 키를 열거하려는 경우 중요합니다 (해결 방법에 의존하는 경우 키 열거는 여전히 원하는 작업을 수행하지 않습니다 ...). 그러나 어쨌든 삭제와 정의되지 않은 할당의 차이점을 강조하려면 ( http://jsfiddle.net/fschwiet/T4akL/ ) :

var deleted = {
    a: 1
};

var cleared = {
    a: 1
};

delete deleted["a"];
cleared["a"] = undefined;

for(var key in deleted) {
    console.log("deleted has key", key);
}

for(var key in cleared) {
    console.log("cleared has key", key);
}

console.log("deleted has a?", deleted.hasOwnProperty('a'));
console.log("cleared has a?", cleared.hasOwnProperty('a'));

출력을 생성합니다.

cleared has key a
deleted has a? false
cleared has a? true 

도움이 되나요?

window.x = 45;
alert(window.x);
window.x = null;

IE에서 이것을 시도했고 window.x에 값이 있었는데, 이는 설정할 수 있음을 증명합니다. 값을 null로 설정하는 것이 가장 좋은 방법입니다.


내 데이터 캐싱을 처리 할 때이 솔루션을 구현했습니다. 데이터가 캐시 빈도가 많지 않아 메모리 누수가 문제가 될 수 있습니다. 비용이 많이 들지만 주기적으로 개체를 다시 매핑하는 것이 손에서 벗어나지 않도록하는 가장 쉬운 방법이었습니다.

obj = {a: 1, b: 2, c: 3};
var max;

function unset(obj, key) {
    try {
        delete obj[key];
    } catch (e) {
        obj[key] = undefined;
    }

    max++;

    if(max > 200) {
        var keys = Object.keys(obj);
        var len = keys.length;
        var n_obj = {};
        for(var i = 0; i < len; i++) {
            if(obj.hasOwnProperty(keys[i]) && obj[keys[i]] !== undefined) {
                n_obj[keys[i]] = obj[keys[i]];
            }
        }
        return n_obj;
    }
    return obj;
}

obj; //{a: 1, b: 2, c: 3}
obj = unset(obj, "b"); //{a: 1, b: undefined, c: 3} OR {a: 1, c: 3}
//and then eventually we'll garbage collect and...
obj = unset(obj, "b"); //{a: 1, c: 3}   

Hopefully, that's useful to some!

참고URL : https://stackoverflow.com/questions/1073414/deleting-a-window-property-in-ie

반응형