Apakah trailing koma standar dalam JavaScript, atau apakah sebagian besar browser seperti Chrome dan Firefox hanya mentolerirnya?
Saya pikir mereka standar, tetapi IE8 muntah setelah bertemu satu — tentu saja IE tidak mendukung sesuatu yang hampir tidak berarti itu bukan standar.
Berikut ini contoh yang saya maksud (setelah elemen terakhir dari susunan buku):
var viewModel = {
books: ko.observableArray([
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } }, // <--right there
]),
currentTemplate: ko.observable("bookTemplate1"),
displayTemplate: function() { return viewModel.currentTemplate(); }
};
javascript
Adam Rackis
sumber
sumber
Jawaban:
Spesifikasi: ECMAScript 5 dan ECMAScript 3
Bagian 11.1.5 dalam spesifikasi ECMAScript 5:
Jadi ya, itu adalah bagian dari spesifikasinya.
Pembaruan: Rupanya ini baru di ES5. Dalam ES3 (halaman 41), definisi itu hanya:
Untuk literal array ( Bagian 11.1.4 ) bahkan lebih menarik ( Pembaruan: ini sudah ada di ES3):
(Di mana
Elision_opt
Elision opt , artinya Elision adalah opsional)Elision
didefinisikan sebagaiJadi, array literal suka
sangat legal. Ini menciptakan array dengan dua elemen tetapi mengatur panjang array menjadi
2 + 3 = 5
.Jangan berharap terlalu banyak dari IE (sebelum IE9) ...
sumber
Hanya pengingat / peringatan cepat bahwa ini adalah salah satu area di mana standar JavaScript / ECMAScript dan standar JSON berbeda; trailing koma valid di JS tetapi tidak valid di JSON.
sumber
Apa yang lebih lucu, IE7 memberikan
sementara Firefox dan Chrome
sumber
[1,,].length
memberi2
. Sense : browser tidak menghasilkan apa-apa.Anda dapat menemukan spesifikasi untuk javascript (alias ECMA Script) di sini . Anda dapat menemukan definisi yang relevan untuk array di halaman 63 dan seperti yang Felix catat, definisi objek beberapa halaman kemudian di halaman 65.
Sementara spesifikasi ini mengatakan tidak apa-apa untuk mengikuti
,
saya tidak tahu apakah itu akan benar melihat kembali beberapa versi. Seperti yang telah Anda catat, IE8- akan menjadi omong kosong jika Anda meninggalkan tanda koma, tetapi Chrome dan FF akan menanganinya dengan baik.sumber
Mari kita hancurkan ini.
Iya. Pada spesifikasi ECMAScript 5 (juga bagian dari panduan gaya Google dan Airbnb)
Ini adalah pertanyaan dukungan ECMAScript 5.
Transpiler seperti Babel akan menghapus koma trailing tambahan dalam kode yang di-transkrip yang berarti Anda tidak perlu khawatir tentang masalah trailing koma di browser lawas.
Jadi itu berarti:
Jadi kemungkinannya adalah jika Anda menggunakan ES5 dan ke atas Anda tidak perlu khawatir tentang hal itu.
Sekali lagi, itu adalah pertanyaan dukungan ECMAScript 5. IE8 tidak mendukung ECMAScript 5 (hanya IE9 dan lebih tinggi)
Saya sangat merekomendasikan untuk melihat Dokumentasi ES5 Airbnb yang sudah usang https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas
Saya juga akan merekomendasikan Mozilla's Documents:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
sumber
Di Chrome 52:
Saya hanya tidak suka koma tertinggal. Orang biasanya menggunakannya dalam proyek Open Source untuk menghindari menghapus baris yang ditulis oleh komiter lain. Lihat pertanyaan yang sama dengan Python: https://stackoverflow.com/a/11597911/968988
sumber
[1,]
: jelas ada sesuatu sebelum koma. Tetapi di[,]
sana ada banyak sebelum dan sesudah koma. Jadi karena saya tidak mengerti[,]
sendiri, saya tidak berpikir menggunakan[1,]
ide yang bagus.