Selain fakta jelas bahwa bentuk pertama dapat menggunakan variabel dan bukan hanya string literal, apakah ada alasan untuk menggunakan satu di atas yang lain, dan jika demikian dalam kasus yang mana?
Dalam kode:
// Given:
var foo = {'bar': 'baz'};
// Then
var x = foo['bar'];
// vs.
var x = foo.bar;
Konteks: Saya telah menulis pembuat kode yang menghasilkan ekspresi ini dan saya ingin tahu mana yang lebih disukai.
javascript
syntax
object-literal
Mark Renouf
sumber
sumber
Jawaban:
(Berasal dari sini .)
Notasi braket persegi memungkinkan penggunaan karakter yang tidak dapat digunakan dengan notasi titik:
termasuk karakter non-ASCII (UTF-8), seperti pada
myForm["ダ"]
( lebih banyak contoh ).Kedua, notasi braket persegi berguna ketika berhadapan dengan nama properti yang bervariasi dengan cara yang dapat diprediksi:
Pembulatan:
Contoh lain dari karakter yang tidak dapat digunakan dengan notasi titik adalah nama properti yang mengandung titik .
Misalnya respons json dapat berisi properti yang disebut
bar.Baz
.sumber
Notasi braket memungkinkan Anda untuk mengakses properti dengan nama yang disimpan dalam variabel:
obj.x
tidak akan berfungsi dalam kasus ini.sumber
Dua cara paling umum untuk mengakses properti dalam JavaScript adalah dengan titik dan dengan tanda kurung. Keduanya
value.x and value[x]
mengakses properti berdasarkan nilai — tetapi tidak harus properti yang sama. Perbedaannya terletak pada bagaimana x ditafsirkan. Saat menggunakan titik, bagian setelah titik harus nama variabel yang valid, dan langsung menamai properti. Saat menggunakan tanda kurung siku, ekspresi antara tanda kurung dievaluasi untuk mendapatkan nama properti. Sedangkan value.x mengambil properti nilai bernama "x", nilai [x] mencoba untuk mengevaluasi ekspresi x dan menggunakan hasilnya sebagai nama properti.Jadi, jika Anda tahu bahwa properti yang Anda minati disebut "panjang", kata Anda
value.length
. Jika Anda ingin mengekstrak properti yang dinamai dengan nilai yang disimpan dalam variabeli
, Anda katakanvalue[i]
. Dan karena nama properti dapat berupa string apapun, jika Anda ingin mengakses properti bernama“2”
atau“John Doe”
, Anda harus menggunakan tanda kurung siku:value[2] or value["John Doe"]
. Ini adalah kasusnya meskipun Anda tahu nama properti yang tepat sebelumnya, karena tidak“2” nor “John Doe”
ada nama variabel yang valid dan karenanya tidak dapat diakses melalui notasi titik.Dalam hal Array
Elemen-elemen dalam array disimpan di properti. Karena nama-nama properti ini adalah angka dan kita sering perlu mendapatkan namanya dari variabel, kita harus menggunakan sintaks braket untuk mengaksesnya. Properti panjang array memberitahu kita berapa banyak elemen yang dikandungnya. Nama properti ini adalah nama variabel yang valid, dan kami tahu namanya sebelumnya, jadi untuk menemukan panjang array, Anda biasanya menulis
array.length
karena lebih mudah untuk menulis daripadaarray["length"]
.sumber
The elements in an array are stored in properties
ini yang membingungkan saya. Apa yang Anda maksud dengan disimpan di properti? Apa itu properti? Dalam array pemahaman saya hanya sekelompok nilai tanpa properti. Jika mereka disimpan di properti, kenapa tidakproperty: value
/ array asosiatif?Notasi dot tidak berfungsi dengan beberapa kata kunci (seperti
new
danclass
) di internet explorer 8.Saya punya kode ini:
Dan ini memicu "indentifier yang diharapkan" yang ditakuti (setidaknya pada IE8 pada windows xp, saya belum mencoba lingkungan lain). Perbaikan sederhana untuk itu adalah beralih ke notasi braket:
sumber
Hati-hati saat menggunakan notasi ini: Misalnya. jika kita ingin mengakses fungsi yang ada di induk jendela. Di IE:
tidak setara dengan
Kami dapat menggunakan:
atau
untuk mengaksesnya
sumber
Secara umum, mereka melakukan pekerjaan yang sama.
Namun demikian, notasi braket memberi Anda kesempatan untuk melakukan hal-hal yang tidak dapat Anda lakukan dengan notasi titik, seperti
Ini dapat diperluas ke properti apa pun yang mengandung karakter khusus.
sumber
Anda perlu menggunakan tanda kurung jika nama properti memiliki karakter khusus:
Selain itu, saya rasa itu hanya masalah selera. IMHO, notasi titik lebih pendek dan membuatnya lebih jelas bahwa itu adalah properti daripada elemen array (walaupun tentu saja JavaScript tidak memiliki array asosiatif pula).
sumber
Notasi braket dapat menggunakan variabel, jadi ini berguna dalam dua contoh di mana notasi titik tidak akan berfungsi:
1) Ketika nama properti ditentukan secara dinamis (ketika nama pastinya tidak diketahui sampai runtime).
2) Saat menggunakan loop for..in untuk melewati semua properti dari suatu objek.
sumber: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
sumber
Anda harus menggunakan notasi braket persegi saat -
Nama properti adalah angka.
Nama properti memiliki karakter khusus.
Nama properti ditetapkan ke variabel dan Anda ingin mengakses nilai properti oleh variabel ini.
sumber
Kasus dimana
[]
notasi bermanfaat:Jika objek Anda dinamis dan mungkin ada beberapa nilai acak di kunci seperti
number
dan[]
atau karakter khusus lainnya, misalnya -var a = { 1 : 3 };
Sekarang jika Anda mencoba mengakses seperti
a.1
itu akan melalui kesalahan, karena mengharapkan string di sana.sumber
Notasi dot selalu lebih disukai. Jika Anda menggunakan beberapa IDE atau editor teks "pintar", itu akan menampilkan nama yang tidak terdefinisi dari objek itu. Gunakan notasi tanda kurung hanya ketika Anda memiliki nama dengan tanda hubung seperti atau sesuatu yang serupa tidak valid. Dan juga jika namanya disimpan dalam variabel.
sumber
Math.sqrt(25)
, tetapi tidakMath['sqrt'](25)
.Izinkan saya menambahkan beberapa kasus penggunaan notasi braket persegi. Jika Anda ingin mengakses properti mengatakan
x-proxy
dalam suatu objek, maka-
akan ditafsirkan secara salah. Mereka adalah beberapa kasus lain juga seperti ruang, titik, dll., Di mana operasi titik tidak akan membantu Anda. Juga jika Anda memiliki kunci dalam variabel maka satu-satunya cara untuk mengakses nilai kunci dalam suatu objek adalah dengan notasi braket. Semoga Anda mendapatkan lebih banyak konteks.sumber
Contoh di mana notasi titik gagal
sumber