2012-09-12 38 views
5

bir özellik anahtar olarak bir nesne kullanarak?bu kodda neler oluyor JavaScript

var a = {a:1}; 
var b = {b:2}; 
var c = {}; 

c[a] = 1; 
c[b] === 1 // true! 

c[b] = 2; 
c[a] === 2 // true! 

Özellikle, neden yukarı bc karşılığında a bir özelliğinde saklandı değeri seyir kullanıyor mu?

bu JavaScript bir özelliğe karşılık bir anahtar olarak bir nesneyi kullanmak ne demektir

?

Chrome/Düğüm ve Firefox'ta bu test ettik.

+2

anda Javascript [object Object] olacaktır muhtemelen coherse (dönüştürülmüş) olsun bir anahtar dizesi olarak nesne için desteği yok ve bir anahtar olarak her nesneye gerçek verir dolayısıyla değerini depolamak, ancak gelecekte 'Harita 'nesneyi anahtar olarak saklamak için kullanabileceğiniz bir şeydir. – Sushil

+0

Kulağa ilginç geliyor. Bu potansiyel gelecekteki Harita sınıfı hakkında bilgi var mı? Birkaç dakika arandığında herhangi bir yerde bulamadım. –

+1

onun ECMAScript'i gelecekteki uygulama 6 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Map burada u gidip ayrıca çok güzel WeakMap kavramı (i şahsen böyle) bulunmaktadır https : //developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/WeakMap burada u – Sushil

cevap

10

JavaScript'te bir özelliğin anahtarı olarak bir nesneyi kullanmak ne anlama gelir?

Javascript nesneleri yalnızca dize anahtarlarına izin verir, böylece nesneniz önce bir dizeye zorlanır.

Özellikle, c'ye bakıldığında, c'ye bakıldığında neden, bir özellikte depolanan değeri döndürür?

{a: 1} ve {b: 2} dize temsili hem"[object Object]", böylece, özelliği yazılır bulunmaktadır.

Düzenleme: Eğer gerçekten tuş olarak nesneleri kullanmak gerekir varsa, nesnenin JSON gösterimi kullanabilirsiniz (ben mümkünse başka bir çözümü tercih ediyorum): yine

c[JSON.stringify(a)] = 1 
c[JSON.stringify(b)] = 2 

Ama denemek Farklı bir yaklaşımı düşünmek. Belki de nesneler, nesnenin kendisinden başka benzersiz tanımlayıcılara sahiptir. Eğer bir anahtar olarak bir nesneyi kullanmak Neden

+1

Alkış Linus var, bu iyi mantıklı. Nesneleri bir anlamda anahtar olarak kullanmam gerekiyor, bu yüzden gerçek bir 'Harita' sınıfı yararlı olacaktır. Ancak setimde çok fazla olmayacak, bu yüzden bir anahtar/değer çifti dizisi oluşturacağımı ve '=== 'tuşlarını kullanarak test yapabildiğimi düşünüyorum. O (N) olacak, fakat N'm 10 civarında olacak, bu yüzden rahatsız değilim. Tekrar teşekkürler. –

2

, anahtar [Object Object] olan object.toString() 'ın sonuç haline geliyor

Peki mülkiyet "[Object Object]" bir değer ayarlayın ve ile değer elde edilir dothing edilir mülkiyet "[Object Object]".

İlgili konular