Bu konuda herhangi bir bilgi bulamıyorum; neden aşağıdaki kod IE'de çalışmıyor? "Bir" bu eylemi desteklemiyor "hatası bildiriyor IE IE sorununda pencere özellikleri üzerinde yinelenen bir şey var mı?IE'de bir pencere özelliğini silme
cevap
ben bu şekilde yapardı:
window[x] = undefined;
try{
delete window[x];
}catch(e){}
teşekkürler, sonunda yaptım. IE'de bir istisna atar, ancak yakalanır ve hiçbir hasar yapılmaz. –
Gördüğüm silme konusundaki en kapsamlı açıklama burada, burası IE bölümü. (Gelecekte bunun daha karmaşık bir konuyla birisinin gelmesi durumunda) http://perfectionkills.com/understanding-delete/#ie_bugs –
Bu yardımcı olur mu?
window.x = 45;
alert(window.x);
window.x = null;
Bunu IE'de denedim ve window.x ayarlanabileceğini kanıtlayan bir değere sahipti. Değeri null olarak ayarlamak, onu temizlemek için en iyi seçimdir.
modernizasyonunu güncellemektedir. Ne yazık ki bu hafızadaki değişkeni ortadan kaldırmaz. boş bir değer, ama söyleyebileceğim kadarıyla tek seçenek bu. –
Teşekkürler. Bir adım daha ileri gittim ve window.x = undefined kullanıyorum. Bu hala istediğim şey değil, ama yapacak.Bu konuda web hakkında hiçbir yararlı bilgi bulamadığım garip. –
Gasper o bitmiş solüsyonu ile bir yorum yaptı, ama sanırım onun gerçek bir cevap olarak seslendiğini değer:
try
{
delete window.x;
}
catch(e)
{
window["x"] = undefined;
}
İlginç bir konu Sadece bu gece kafama çarpıyordum. İstisna IE'ye atıldı ama Firefox değil. Bu geçici çözümün bellek sızıntısından şüphelenirim, bu yüzden dikkatli kullanın.
Neden sorulmamış, neden sadece tanımlanmamış? Anahtarları daha sonra yeniden numaralandırmak isterseniz önemlidir (bununla birlikte, geçici çözüm yöntemine güveniyorsanız, anahtar numaralandırma istediğinizi yapmayacaktır ...). Ama her neyse, silme arasındaki farkı vurgulamak için ve sadece tanımsız (http://jsfiddle.net/fschwiet/T4akL/) atama:
cleared has key a
deleted has a? false
cleared has a? true
Bir meslektaşım onlara bu çözümü gösterdiğimde iyi bir soru sordu: neden orta adamı atlamıyorsunuz? ve silme çağrısını tanımsız atama ile değiştirin? –
İyi bir soru, farkın önemli olduğu bir davaya girmem bir yıl sürdü. –
kendi verileri önbelleğe ile uğraşırken ben bu çözümü hayata - Veri değildim:
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'));
çıktı üretir Önbellek sıklığı, bellek sızıntısı bir sorun haline gelmiş olabilirdi. Pahalı, ama periyodik olarak nesnenin tekrar eşleştirilmesi, elden çıkmadığından emin olmam için en kolay yoldu.
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}
Umarım, bu biraz yararlıdır!
- 1. Qt QMainWindow merkezi pencere öğesi silme işlemi
- 2. Bir kaydı silme (GridView kullanarak)
- 3. Alfresco'daki bir düğümden özellik silme
- 4. ios UITableView silme modunu silme/yeniden düzenleme, silme simgesi silme
- 5. Bir stilin TargetType özelliğini
- 6. Pencere Kimliği'ni kullanarak bir pencere etkinleştirin
- 7. Uygulama temsilcisi, bir ana hikaye tahtasını kullanmak istiyorsa pencere özelliğini uygulamalıdır
- 8. Ekranda bir char silme
- 9. PHP'de bir üstbilgi silme
- 10. şöyle bir pencere oluşturduk
- 11. Java: Flaş bir pencere
- 12. Tkinter bir pencere değil
- 13. Bir pencere nasıl canlandırılır?
- 14. İlk pencere boyutunu Caliburn.micro
- 15. Bekleme özelliğini kullanarak .htaccess özelliğini kullanma
- 16. Bir std :: vektöründen silme aralığı?
- 17. Activeadmin'de bir Paperclip Ekini Silme
- 18. Özellik dosyasından bir girişi silme
- 19. Common Lisp'de bir tür silme
- 20. Bir dosyanın son satırını silme
- 21. subversion bir silme komutunu birleştirme
- 22. Perl: Açıksa, bir dosya silme
- 23. JSON Silme özelliği kaynak değişkeninde silme de
- 24. AJAX silme işlemlerini raylarda rahatlıkla silme
- 25. Doktrin varlıkları silme işlemi silme, performans karşılaştırması
- 26. Min-Max yığın silme öğesi silme
- 27. C++ hata oluşsa bile silme silme
- 28. EditText yayılma alanındaki silme düğmesinin üzerindeyse silme
- 29. Ekran kaydı tek bir pencere
- 30. Kaydırılabilir bir pencere formunu yazdırma.
Ve sadece açık olmak gerekirse, çünkü hiç kimse bunun yanıtlarda herhangi birinin gerçekte söylediğine benzemiyor: Internet Explorer'da bu bir * hatadır *. 1999 (3. baskı) belirtiminde, özellik silinmemiş veya silinemez olsa bile ('window.x' 'in her durumda olmaması gerekir) bile' delete 'dışında bir istisna atmaya izin veren hiçbir şey yoktur. yeni 5. baskı özelliği sadece yeni silme modunda 'silme 'den atılan istisnalara izin verir. Bu konuda 'pencere' hakkında özel bir şey yok. Ve yine de, IE8'deki JScript motoru * hala * bu hatayı 2010'da sergiliyor. * İç çek * –
[İyi ilgili makale] (http://perfectionkills.com/understanding-delete/). – alex
T.J. Crowder, pencere bir nesne değildir, kök ad alanının bir erişimcisidir. Böyle özelliklere sahip değildir, bu nedenle, bu durumda olduğu gibi silme işlemini çalıştırdığınızda, bunların herhangi bir nedenle kaldırılması zorunlu değildir. Nesnenin isminde undefined ayarı yapmak iyi bir şeydir çünkü gc gelip ilgisiz nesnelere neden olur. Umarım buradaki asıl meseleyi anlamanıza yardımcı olur ve bu neden bu kadar fazla bir hata değildir, çünkü bu durum yavaş yavaş modernize etmek için –