SORU
11 AĞUSTOS 2010, ÇARŞAMBA


Güvenli onları üzerinden yineleme sırasında bir nesne özelliği silmek için mi?

Bir nesnenin özellikleri üzerinden yineleme zaman için bir döngü içinde iken onları silmek için güvenli mi?

Örneğin:

for (var key in obj) {
    if (!obj.hasOwnProperty(key)) continue;

    if (shouldDelete(obj[key])) {
        delete obj[key];
    }
}

Diğer dillerde bir dizi ya da sözlük üzerinden yineleme ve içinde silme bu güvenli değildir. Tamam JS?

(Mozilla Spidermonkey zamanı kullanıyorum.)

CEVAP
24 EKİM 2013, PERŞEMBE


ECMAScript 5.1 standard Bölüm 12.6.4 (- döngüler) diyor ki:

Nesne özellikleri numaralandırılmış numaralandırma sırasında silinmiş olabilir. Bir özelliği varsa henüz numaralandırma silinmiş sırasında ziyaret edilmiş, daha sonra ziyaret olmayacaktır. Eğer yeni özellikler ise nesne numaralandırma sırasında numaralandırılmış eklenen, yeni eklenen özellikler garanti edilmez aktif numaralandırma ziyaret etti. Özellik adı bir kez daha herhangi bir numaralandırma ziyaret edilmesi gerekir.

OP kod ve beklendiği gibi çalışır yasal olduğunu düşünüyorum. Tarayıcı tuhaflıklar yineleme düzeni etkiler ve açıklamaları OPs kod işe yarayıp genel olarak, ama değil silmek. Genel olarak iyi sadece silmek için geçerli özelliği yineleme - silme diğer özellikler nesneyi beklenmedik bir şekilde neden onlara dahil (zaten ziyaret) yer alan yineleme, ancak bu olabilir ya da olmayabilir bir endişeye bağlı bir durum.

Ayrıca Bkz:

Bunların hiçbiri gerçekten OP kod etkiler.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CaptainDisillusion

    CaptainDisil

    18 EYLÜL 2007
  • metagamers

    metagamers

    13 Mayıs 2006
  • spederson7

    spederson7

    17 Temmuz 2006