Jawaban:
Tidak, tanda kutip tidak membuat perbedaan (kecuali, seperti yang Anda catat, Anda ingin menggunakan kunci yang bukan pengidentifikasi JavaScript yang valid).
Sebagai catatan tambahan, format pertukaran data JSON memang membutuhkan tanda kutip ganda di sekitar pengidentifikasi (dan tidak mengizinkan tanda kutip tunggal).
Dari Nama properti / kunci objek yang tidak dikutip dalam JavaScript , tulisan saya tentang subjek:
Kutipan hanya dapat dihilangkan jika nama properti adalah literal numerik atau nama pengenal yang valid .
[...]
Notasi braket dapat digunakan dengan aman untuk semua nama properti.
[...]
Notasi titik hanya dapat digunakan ketika nama properti adalah nama pengidentifikasi yang valid.
Perhatikan bahwa kata-kata yang dipesan diperbolehkan untuk digunakan sebagai nama properti yang tidak dikutip dalam ES5. Namun, untuk kompatibilitas dengan ES3, saya sarankan mengutipnya.
Saya juga membuat alat yang akan memberi tahu Anda jika ada nama properti yang dapat digunakan tanpa tanda kutip dan / atau dengan notasi titik. Cobalah di mothereff.in/js-properties .
Tidak ada perbedaan di sini. Hanya masalah gaya. Salah satu alasan untuk melakukan ini adalah karena dapat menggunakan 'super' atau 'kelas' sebagai kunci karena kata kunci tersebut dilindungi undang-undang.
Beberapa orang mungkin tergoda untuk menyerahkan string dengan spasi putih lalu memanggil o ['Saya dapat memiliki spasi putih]. Tetapi saya akan menyebut praktik buruk itu.
Tidak, tidak untuk javascript. Namun, beberapa parser JSON akan gagal ketika tanda kutip di sekitar kunci tidak ada.
Ada beberapa situasi di mana mereka berbeda. Misalnya, jika Anda menggunakan jQuery, dan Anda membuat daftar parameter untuk dilewati ketika memanggil perintah jQuery $ () untuk membuat elemen, kata-kata yang dikutip diubah menjadi parameter, dan kata-kata yang tidak dikutip diubah menjadi fungsi. Misalnya, "ukuran" akan mengatur atribut ukuran objek, dan ukuran (tanpa tanda kutip), akan memanggil fungsi size () pada objek. Lihat jQuery () , di dekat bagian bawah:
Sementara argumen kedua nyaman, fleksibilitasnya dapat menyebabkan konsekuensi yang tidak diinginkan (misalnya $ ("
<input>", {size: "4"}) memanggil metode .size () alih-alih mengatur atribut ukuran). Dengan demikian, blok kode sebelumnya dapat ditulis sebagai:
obj = { 12e34: true };tidak sama denganobj = { '12e34': true };. Yang pertama akan meminta Anda untuk mengakses properti melaluiobj['1.2e+35'], sedangkan untuk yang terakhir Anda akan gunakanobj['12e34']. Lihat jawaban saya untuk lebih jelasnya.