SORU
1 Aralık 2011, PERŞEMBE


Boş özellik bir anahtar kullanabilir miyim?

Firefox sadece bu test ettik, ama görünüşe göre bir nesne, bir özellik için bir anahtar olarak boş bir dize kullanabilirsiniz. Örneğin, ilk özellik burada

var countsByStatus = { 
  "": 23, //unknown status
  "started": 45,
  "draft": 3,
  "accepted": 23,
  "hold": 2345,
  "fixed": 2,
  "published": 345
}

ECMA görüşler üzerinden kaymağını, bu (en az 5) görünür özelliğini anahtarları dizeleri olarak tanımlanır ve 0 veya daha fazla karakter dizeleri. Bu boş bir dize bu özelliklere göre geçerli bir özellik adı anlamına gelir.

Her neyse, bir veri öğesi durumuna göre bazı sayıları özetleri hesaplıyorum nerede kod bölümünde bu kullanmayı tercih ediyorum (yukarıda gösterdiğim şeye benzer). Bir statüye sahip olmayabilir bazı öğeler vardır, ve onlar için bir yer istiyorum. Durumları kullanıcı tanımlı olduğundan, çatışma diye uydurma bir kelime kullanarak risk almak istemiyorum.

Çok basit ve zarif, kolayca boş bir dize ne anlama geleceğini söyleyebilirim verilere baktığımızda görünüyor. Ayrıca boş bir dize bir durum olmadan eşya durumunu tam değer olacağı için kod biraz daha verimli hale getirir.

Ama aynı anda, içimden bir ses bir şeylerin yanlış olduğunu söylüyor bana. Bazı tarayıcı bunu desteklemiyor olabilir, şans dışında, bir gün sabit olacak JavaScript bir hata ile karşılaştı gibi hissediyorum. Ama, aynı anda, aynı duygu bir zamanlar sahip olduğum hakkında başka bir sürü JavaScript özellikleri ben şimdi her gün (gibi zaman keşfettim && ve || değer biri işlenen değil, sadece doğru veya yanlış).

CEVAP
1 Aralık 2011, PERŞEMBE


Bir nesnenin bir anahtar dize, boş bir dize ('') olmalıdırbir dize. Bir anahtar adı olarak boş bir dize kullanmak için kabul edilebilir olduğunu düşündüğüm çok az durum olmuştur, ancak hiç boş dizeleri ile karşılaştığım bu çapraz tarayıcı sorunu yok.

İstiyorumvazgeçirmekbir anahtar gibi '' genel kullanım, ama basit bir arama için, sadece iyi çalışır, ve bana da mantıklı geliyor. Yorum istisnai durum belirterek eklemek için iyi bir yer.

Ayrıca, arama sırasında bir dizeye döküm değerleri ile ilgili sorunlar olabilir:

o = {...} //some object
foo = 'bar';

//some examples
o[foo] //will return o['bar']
o[null] //will return o['null']
o[undefined] //will return o['undefined']

null undefined '' anahtarı kullanmak isterseniz, bir geri dönüş kullanmanız gerekebilir:

key = key || '';

Eğer sigara değerler geçirilen olabilir, önemli olan çok dökme için:

key = key || '';
key = ''   key;

0 değeri '0' değeri '0' kalacak ise '', dönüşecek unutmayın.


Çoğu durumda, bir dışında önceden tanımlanmış bir değer seçiyorum buluyorumkarma tablonesne. Değer nesne üzerinde var olduğunu kontrol etmek için bir dizi seçenek vardır:

//will be falsey if the value is falsey
if (o[key]) {...}

//will return true for properties on the object as well as in the prototype hierarchy
if (key in o) {...}

//returns true only for properties on the object instance
if (o.hasOwnProperty(key)) {...}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CrazyMan

    CrazyMan

    14 Mayıs 2008
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • William Hyde

    William Hyde

    23 HAZİRAN 2008