2013-07-24 26 views
7

noktasını kullanarak bir değer ekleyerek bir nesneyi (büyük harf) değiştirerek nokta işaretli bir diziye özellik ekleyerek nesneyi değiştirir mi?Bir diziyi

var arr = []; 

arr.something = "test"; 

Bu bir dizi mi?

Ben öyle düşünmüyorum, ama underscore.js o

console.log(_.isArray(arr)); //true 

http://jsfiddle.net/wZcyG/

+1

Çalıştığınız kod şu şekildedir: http://underscorejs.org/docs/underscore.html#section-112 –

+1

Tahminimce bu satırı değerlendirirsiniz 'arr = []' 'arr' tipi ayarlandı. Bundan sonra, Sanal Makinanın, türün bir sonraki atamaya kadar değiştiğini bilmesi için bir fırsat yoktur. –

+0

@Adi Inbar Bu başlık amaca yönelikti. Neden düzenledin? Bunu belirtmenin doğru yolu bu değil mi? – 1252748

cevap

7

diyor sen underscore.js source bakarsanız, siz isArray fonksiyon olarak tanımlanır göreceksiniz :

_.isArray = nativeIsArray || function(obj) { 
    return toString.call(obj) == '[object Array]'; 
    }; 

brower doğal Array.isArray o kadar örneği olmuştur budur çünkü bir dizi olduğunu söylüyor. Tarayıcıda yerel bir isArray yoksa, altyazı.js ikinci seçeneği kullanır: [object Array] dizesiyle eşleşip eşleşmediğini görmek için nesne üzerinde toString karşılaştırması.

Sadece bir özelliğin eklenmesi, nesnenin tip türünü değiştirmek için yeterli değildir (JavaScript sanal makinesine göre, hala bir dizi olan bir nesnedir). JavaScript dinamik bir dildir; bu, yerleşik nesnelere özellik ekleyebileceğiniz anlamına gelir, ancak bunu yapmakta olduklarını değiştirmez; sadece onları uzattın. Örneğin, Prototype.js, bunlara fazla özellik ekleyerek (yineleyiciler, filtreler, eşleme işlevleri vb.) Yerel nesneleri genişletmek için kullanılır.

Oldukça kolay Chrome'da davranışı görebilirsiniz

: tarayıcı bildirdi

> var arr = [1, 2, 3]; 
    arr.something = "test"; 
    console.log(arr.length, arr.something); 

    3 "test" 

Bildirimi: dizi onun length özelliğini kaybetmez

> var arr = []; 
    arr.something = "test"; 

> Array.isArray(arr); 
    true 

> toString.call(arr); 
    "[object Array]" 

DÜZENLEMEYİ

3 doğru uzunluğu ve test f için doğru değer veya something özelliği.

+0

+1 Tahminimce doğru gibi görünüyor :) –

+0

Ama 'length' yöntemini kaybediyor? Yani bazı temel seviyelerde değişti, değil mi? – 1252748

+0

Yukarıdaki kodu konsolunuza yapıştırın. FF her ikisi de uzunluk = 0 ve .something = test – Robert