SORU
20 NİSAN 2010, Salı


Nasıl itiraz JavaScript herhangi bir özellikleri olup olmadığını kontrol etmek için?

İlan ediyorum varsayarsak

var ad = {}; 

Nasıl bu nesne kullanıcı tanımlı özellikler içeren herhangi bir olup olmadığını kontrol edebilir miyim?

CEVAP
20 NİSAN 2010, Salı


Ne basit bir fonksiyon yapmaya ne dersiniz?

function isEmptyObject(obj) {
  for(var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
      return false;
    }
  }
  return true;
}

isEmptyObject({}); // true
isEmptyObject({foo:'bar'});  // false

Doğrudan arama Object.prototype hasOwnProperty yöntem sadece biraz daha ekleyingüvenlikhayal obj.hasOwnProperty(...) normal bir telefon kullanarak aşağıdaki

isEmptyObject({hasOwnProperty:'boom'});  // false

Not:(gelecek için)Yukarıdaki yöntem for...in ifadesi kullanır, ve bu ifade, sadece üzerinde dolaşırsayısızözellikleri, yaygın olarak uygulanan ve şu anda en ECMA Standardı (3rd edition) programcı olmayan sayısız özellikleri oluşturmak için herhangi bir yolu yok.

Ancak bu şimdi ECMAScript 5th Edition ile değişti ve olmayan sayısız, yazılabilir olmayan veya non-deletable Özellikleri, Bu yüzden yukarıdaki yöntem oluşturmak edebiliyoruzbaşarısız olabilirörneğin:

var obj = {};
Object.defineProperty(obj, 'test', { value: 'testVal', 
  enumerable: false,
  writable: true,
  configurable: true
});
isEmptyObject(obj); // true, wrong!!
obj.hasOwnProperty('test'); // true, the property exist!!

Bu sorun için ECMA 5 bir çözümdür:

function isEmptyObject(obj) {
  return Object.getOwnPropertyNames(obj).length === 0;
}

Object.getOwnPropertyNames yöntem adlarını içeren Array döndürürtümmülkleri varbir nesne,sayısız yabu yöntem artık tarayıcı üreticileri tarafından uygulanmakta olup , zaten Chrome 5 Beta ve son Y Gece Kurar.

Object.defineProperty ayrıca tarayıcı ve en son bu Firefox 3.7 Alpha sürümleri mevcuttur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • DragsterMC Gaming

    DragsterMC G

    30 HAZİRAN 2013
  • Noam Erez

    Noam Erez

    3 NİSAN 2012