var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
Temel olarak, 2 özellikli ( key
ve olarak adlandırılır value
) bir nesne hazır bilgisi oluşturuyor push()
ve diziye (kullanarak ) ekliyorsunuz .
Düzenleme: Neredeyse 5 yıl sonra, bir "normal" JS nesne değişmezi (aka harita, aka hash, aka sözlük) oluşturmuyor çünkü bu cevap downvotes oluyor. Edilir ancak OP istedi yapısı oluşturmak (ve buna bağlı diğer söz gösterilmektedir) olup, nesne değişmezleri bir dizi her biri, ve
key
value
özellikleri. Bana bu yapının neden gerekli olduğunu sorma, ama istenen yapı bu.
Ancak, düz bir JS nesnesinde istediğiniz şey - ve OP'nin istediği yapıda değilse - tcll'nin cevabına bakın , ancak geçerli JS adları olan basit anahtarlarınız varsa, parantez notasyonu biraz hantal. Bunu sadece yapabilirsiniz:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
Veya bir nesne oluşturduktan sonra özellikleri ayarlamak için normal nokta gösterimini kullanın:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
Sen yok böyle bunları boşluklar, özel karakterler veya şeylere sahip anahtarlar sende eğer köşeli parantez açıklaması istiyorum. Örneğin:
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
Anahtarlarınız dinamikse köşeli ayraç notasyonu da istersiniz:
dict[firstName + " " + lastName] = "some value";
Anahtarların (özellik adları) her zaman dize olduğunu ve dize olmayan değerlerin anahtar olarak kullanıldığında bir dizeye zorlanacağını unutmayın. Örneğin, bir Date
nesne dize temsiline dönüştürülür:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
Bununla birlikte, bunun pek çok nesnenin "[object Object]"
benzersiz olmayan bir anahtar üretmediği gibi bir dize temsiline sahip olacağından, bunun yalnızca "işe yaramadığını" unutmayın. Bu yüzden şuna dikkat edin:
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
Rağmen objA
ve objB
tamamen farklı ve benzersiz unsurları olmanın, ikisi de aynı temel dize temsilini vardır: "[object Object]"
.
Bunun nedeni Date
, Date
prototipin toString
varsayılan dize temsilini geçersiz kılan özel bir yöntemi olmasıdır. Ve aynısını yapabilirsiniz:
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(Yukarıdakiler rastgele bir sayı kullandığından , isim çakışmalarının yine de çok kolay bir şekilde gerçekleşebileceğini unutmayın. Bu yalnızca bir uygulamasını göstermek içindir toString
.)
Bu nedenle, nesneleri anahtar olarak kullanmaya çalışırken JS, nesnenin kendi toString
uygulamasını (varsa) veya varsayılan dize temsilini kullanır.