Bence Cheeso'nun sorusuna verilecek doğru cevap, uygulamanın dokümantasyonu aşmasıdır. Artık anahtar olarak bir dize gerektirmez, daha çok bir dize (yani tırnaklı) veya (muhtemelen) değişken adı olarak kullanılabilecek herhangi bir şey olabilir, ki bunun bir harfle başlaması anlamına geldiğini tahmin edeceğim, _ veya $ ve yalnızca harfleri, sayıları ve $ ve _ karakterlerini içerir.
Geri kalanını, bu soruyu ziyaret eden bir sonraki kişi için yaptığım aynı fikirle basitleştirmek istedim. İşte et:
Nesne anahtarı olarak kullanıldığında, değişken adları JSON'da enterpolasyonlu değildir (Teşekkürler Friedo!)
Breton, "anahtar" yerine "tanımlayıcı" kullanarak "eğer bir tanımlayıcı ayrılmış bir kelime ise, bir tanımlayıcı olarak değil o kelime olarak yorumlanır" diye yazmıştır. Bu doğru olabilir, ama hiç sorun yaşamadan denedim:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
Quentin, tırnak işaretleri kullanma hakkında "... [anahtar] belirli karakterleri (veya onu bir anahtar kelime yapacak karakter kombinasyonlarını ) içermediği sürece " ...
@ İşaretini kullanarak önceki kısmın (belirli karakterlerin) doğru olduğunu buldum (aslında, hataya neden olmayan tek karakterlerin $ ve _ olduğunu düşünüyorum):
var a = {a@b:1};
=> Sözdizimi hatası
var a = {"a@b":1};
a['a@b']
=> 1
ancak yukarıda gösterdiğim gibi, anahtar kelimelerle ilgili parantez doğru değil.
İstediğim şey işe yarıyor çünkü açılış {ve iki nokta üst üste arasındaki veya sonraki özellikler için virgül ve iki nokta üst üste arasındaki metin, bir nesne anahtarı oluşturmak için tırnaksız bir dize olarak kullanılıyor veya Friedo'nun dediği gibi, bir değişken adı yok ' t enterpolasyonlu olsun:
var uid = getUID();
var token = getToken();
var data = {uid:uid,token:token};
data.token
=> ABC123