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

  • AginoEvolutionHD

    AginoEvoluti

    27 AĞUSTOS 2011
  • case LianLi

    case LianLi

    28 Mayıs 2010
  • HowcastSportsFitness

    HowcastSport

    11 Mayıs 2011