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

  • Chilla Frilla™

    Chilla Frill

    7 Aralık 2006
  • New Scientist

    New Scientis

    27 Kasım 2006
  • Sali Kaceli

    Sali Kaceli

    24 ŞUBAT 2009