Pada bulan Desember 2009, ECMascript merilis ECMASCRIPT 5, yang telah dirilis untuk versi terakhir dari standar ECMASCRIPT 3 untuk versi sebelumnya. Kompleksitas bahasa ini (yaitu, apakah akan meningkatkan sejumlah besar karakteristik untuk memperluas fungsi ecmascript) dan mati, membuat perumusan standar ecmascript baru yang sangat tertinggal di balik pemrograman. Ecmascript 5 tidak begitu ambisius dalam hal tujuan. Dalam mode ini, sintaks ecmascript telah menjadi lebih ketat, membuat banyak kode yang umum -mudah -untuk -rawan tidak lagi diizinkan, termasuk deklarasi variabel wajib dan tidak menunjukkan dengan pernyataan. Mode ini sangat sederhana.
Saya kemudian mengetahui bahwa pada tahun 2010, saya juga menulis artikel pendek untuk membahas cacat dengan kata kunci, dengan yang berikut ini.
baji
Dahulu kala, kota kelahiran kota kelahiran Tuhan Ma Liang dinamai sesuai namanya. Ma Liang tidak mengundurkan diri, tetapi membuat empat kata. Bertahun -tahun kemudian, seorang asing datang ke sini dan menghentikan orang setempat di jalan ini.
Apakah ini jalan shenma?
Ya, ini adalah Shenma Road.
Apakah kamu tidak tahu juga?
Saya orang ini, bagaimana saya bisa tidak tahu.
Apakah ini jalan shenma?
Anda tahu apa yang Anda minta.
Saya hanya tidak tahu bahwa ini adalah Shenma Road.
Bukankah aku memberitahumu ini jalan shenma?
Bisakah Anda mengatakannya lagi?
Nympho
Setelah itu, penduduk setempat mengingat pendapat Ma Liang tahun itu, dan tiba -tiba menyadari. Apa yang dibicarakan Ma Liang -jangan gunakan singkatan.
Sebuah pertanyaan
Suatu hari tur ke Wang er, teman Cina -nya, "Saya punya mimpi. Saya ingin menunjukkan diri saya di CCTV." CCTV Toko.
Pertanyaannya adalah ketika Tom mengatakan mimpinya, dia
A) ambisius b) tidak ambisius c) ambigu d)
Anggr yang tepat adalah b) dan c).
teks
Dua contoh di atas dari Cina kuno dan modern dan negara -negara asing menjelaskan bahwa refleksi terkadang menyebabkan ambiguitas. Ini juga ada di JavaScript. Terkadang sangat merepotkan untuk meregenerasi variabel yang panjang, seperti ::
ObjectWithLongName1.propty1 = value1;
ObjectWithLongName1.propty2 = value2;
ObjectWithLongName1.propty3 = value3;
ObjectWithLongName1.method1 ();
Tetapi nama yang jelas sangat penting untuk keterbacaan program. Jadi JavaScript menyediakan dengan pernyataan. Contoh di atas dapat ditulis ulang:
Salin kode kode sebagai berikut:
Dengan (ObjectWithLongName1) {{
propty1 = value1;
propy2 = value2;
propy3 = value3;
Method1 ();
}
Ini menghemat banyak kung fu di keyboard, dan struktur program menjadi lebih jelas. Tetapi singkatan ini memperkenalkan ambiguitas. Aturan analisis JavaScript adalah untuk menemukan atribut nama -nama ini di ObjectWithLongName1 terlebih dahulu. Inilah yang dijelaskan oleh kode:
Salin kode kode sebagai berikut:
If (objectWithLongName1.property1! == tidak terdefinisi) {
If (objectWithLongName1.Value1! == tidak ditentukan) {
ObjectWithLongName1.Property1 = ObjectWithLongName1.Value1;
} Kalau tidak {
ObjectWithLongName1.property1 = value1;
}
} Kalau tidak {
If (objectWithLongName1.Value1! == tidak ditentukan) {
Properti1 = ObjectWithLongName1.Value1;
} Kalau tidak {
Properti1 = value1; // mungkin 4
}
}
Yang kami inginkan adalah salah satu dari empat kemungkinan ini, tetapi jika Anda tidak hati -hati, program ini akan menjalankan kemungkinan lain. Selain itu, cara menulis ini juga sangat sulit untuk menyelesaikan pembaca program. Di sisi lain, ketidakpastian ini juga mempengaruhi kinerja bahasa untuk penerjemah JavaScript.
Bahkan, selama perbaikan kecil dapat dihilangkan, cacat ini dapat dihilangkan. Kita dapat menambahkan angka titik sebelum atribut objek, sehingga ada perbedaan intuitif antara atribut dan variabel eksternal, dan ada banyak bahasa lain yang melakukan ini. Contoh awal kami akan menjadi seperti ini:
Salin kode kode sebagai berikut:
Dengan (ObjectWithLongName1) {{
.propty1 = value1;
.propty2 = value2;
.propty3 = value3;
.method1 ();
}
Sebelum JavaScript melakukan perbaikan seperti itu, dua kekuatan berbahaya itu ringan, dan kita harus mencoba menghindari menggunakan pernyataan dengan sebanyak mungkin. Kami masih dapat mengadopsi beberapa metode perubahan.
Salin kode kode sebagai berikut:
var O1 = ObjectWithLongName1;
o1.prpty1 = value1;
o1.prpty2 = value2;
o1.prpty3 = value3;
o1.method1 ();
Atau untuk situasi ini:
ObjectWithLongName1.propty1 = ObjectWithLongName2.propty1;
ObjectWithLongName1.propty2 = ObjectWithLongName2.propty2;
Nympho
ObjectWithLongName1.propty10 = ObjectWithLongName2.propty10;
Dapat ditulis sebagai:
Salin kode kode sebagai berikut:
(Function (o1, o2, pl) {
pl.foreach (function (it) {o1 [item] = o2 [item];});
}) (ObjectWithLongName1, ObjectWithLongName2, ['Propty1', 'Propty2', ..., 'Propty10'));