Mengapa cuplikan kode di bawah, yang diambil dari artikel ini , memberikan hasil yang berbeda karena hanya satu perubahan dalam penempatan kurung kurawal?
Ketika kurung kurawal buka {
pada baris baru, test()
kembali undefined
, dan "tidak - putus: tidak ditentukan" ditampilkan dalam peringatan.
function test()
{
return
{ /* <--- curly brace on new line */
javascript: "fantastic"
};
}
var r = test();
try {
alert(r.javascript); // does this work...?
} catch (e) {
alert('no - it broke: ' + typeof r);
}
Ketika kurung kurawal berada di baris yang sama dengan return
, test()
mengembalikan objek, dan "fantastis" diperingatkan.
function test()
{
return { /* <---- curly brace on same line */
javascript: "fantastic"
};
}
var r = test();
try {
alert(r.javascript); // does this work...?
} catch (e) {
alert('no - it broke: ' + typeof r);
}
javascript
syntax
Baru belajar
sumber
sumber
return
sedikit berbeda daripada di tempat lain, dan pemutusan baris "lebih berarti" di tempat itu daripada "di tengah".Jawaban:
Itulah salah satu perangkap JavaScript: penyisipan titik koma otomatis. Garis yang tidak diakhiri dengan titik koma, tetapi bisa menjadi akhir dari pernyataan, secara otomatis dihentikan, jadi contoh pertama Anda terlihat seperti ini:
Lihat juga panduan gaya JS Douglas Crockford , yang menyebutkan penyisipan titik koma.
Dalam contoh kedua Anda, Anda mengembalikan sebuah objek (dibangun oleh tanda kurung kurawal) dengan properti
javascript
dan nilainya"fantastic"
, efektif sama seperti ini:sumber
return /*
dan kemudian*/{
akan secara efektif mengomentari titik koma yang tersembunyi di versi chrome yang lebih lama. Tidak yakin apakah itu masih berlakuJavascript tidak memerlukan titik koma di akhir pernyataan, tetapi kekurangannya adalah ia harus menebak di mana letak titik koma. Sering kali hal ini bukan masalah, tetapi terkadang hal ini menciptakan titik koma yang tidak Anda inginkan.
Contoh dari posting blog saya tentang ini ( Javascript - hampir tidak berbasis garis ):
Jika Anda memformat kode seperti ini:
Maka diartikan seperti ini:
Pernyataan return mengambil bentuk tanpa parameternya, dan argumennya menjadi pernyataannya sendiri.
Hal yang sama terjadi pada kode Anda. Fungsi tersebut diartikan sebagai:
sumber
Saya pribadi lebih suka Gaya Allman untuk keterbacaan (vs gaya K&R).
Dari pada…
Saya suka…
Tapi ini solusi. Aku bisa menerimanya.
sumber
Itu karena javascript paling sering menempatkan ";" di akhir setiap baris, jadi pada dasarnya ketika Anda memiliki kembali {di baris yang sama, mesin javascript melihat bahwa akan ada sesuatu yang lebih, dan ketika di baris baru ia berpikir Anda lupa untuk meletakkan ";", dan menaruhnya untuk Anda.
sumber
Tanda kurung kurawal di sini menunjukkan konstruksi objek baru. Jadi kode Anda sama dengan:
yang berfungsi sedangkan jika Anda menulis:
itu tidak lagi berfungsi.
sumber
Masalahnya memang injeksi titik koma seperti dijelaskan di atas. Saya baru saja membaca posting blog yang bagus tentang hal ini. Ini menjelaskan masalah ini dan lebih banyak lagi tentang javascript. Ini juga berisi beberapa referensi yang bagus. Anda bisa membacanya di sini
sumber