SORU
29 HAZİRAN 2009, PAZARTESİ


Nasıl bir değişken bir dizi ise tespit

En iyi de-facto standart tarayıcı çapraz yöntem ise JavaScript değişken bir dizi olup olmadığını belirlemek için nedir?

Web orada arıyor farklı öneriler bir dizi, iyi ve çok geçersiz.

Örneğin, aşağıdaki temel bir yaklaşım

function isArray(obj) {
    return (obj && obj.length);
}

Ancak, ne olursa dizinin boş, ya n olur not aslında bir dizi değil ama uzunluğu özelliği, vb uygular.

Hangi uygulama gerçekten işe yarıyor çapraz tarayıcı olması açısından en iyisi ve hala verimli bir şekilde gerçekleştirmek?

CEVAP
29 HAZİRAN 2009, PAZARTESİ


JS nesne tipi kontrol instanceof ıe üzerinden yapılıyor

obj instanceof Array

Bu nesnenin her kare ** 10 kendi nesne gibi çerçeve sınırlarında geçerse işe yaramaz. İç kontrol ederek çözüm bulabilirsiniz[[Class]]nesnenin özelliği. Bunu elde etmek için, Object.prototype.toString() (ECMA-262 ile çözüm sağlanır) kullanın:

Object.prototype.toString.call(obj) === '[object Array]'

Her iki yöntem de tek gerçek diziler ve dizi gibi arguments nesne ya da düğüm listeleri gibi nesneler için çalışır. Dizi gibi nesneleri length sayısal bir özelliği olmalı, böyle kontrol edeceğim:

typeof obj !== 'undefined' && obj !== null && typeof obj.length === 'number'

Lütfen dizeleri IE dizin tarafından bir dize karakterleri erişim izin vermez gibi sorunlara neden olan bu onay, geçecek unutmayın. Bu nedenle, typeof obj === 'object' typeof obj !== 'undefined' ilkel dışlamak ve türleri 'object' hepinize ayrı ile nesneleri barındırmak için değiştirmek isteyebilirsiniz. Bu hala elle tutulması gerekir ki string nesneleri geçmesine izin verecek.

Aslında bilmek istediğim çoğu durumda, sayısal endeksleri ile nesne üzerinden yineleme yapabilirsiniz olsun. Bu nedenle, eğer nesne bu çeklerden herhangi biri ile yapılabilir bir özellik 0 adlı yerine, varsa kontrol etmek iyi bir fikir olabilir:

typeof obj[0] !== 'undefined' // false negative for `obj[0] = undefined`
obj.hasOwnProperty('0') // exclude array-likes with inherited entries
'0' in Object(obj) // include array-likes with inherited entries

Nesne için kalıbı düzgün dizi gibi ilkel (yani dizeleri) çalışması için gereklidir.

İşte JS diziler için sağlam çekler için: kod

function isArray(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
}

ve iterable boş olmayan yani) dizi gibi nesneler:

function isNonEmptyArrayLike(obj) {
    try { // don't bother with `typeof` - just access `length` and `catch`
        return obj.length > 0 && '0' in Object(obj);
    }
    catch(e) {
        return false;
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bmarian22

    bmarian22

    22 Aralık 2007
  • hotstrikegently

    hotstrikegen

    26 AĞUSTOS 2011
  • infodirt

    infodirt

    11 Mart 2009