Serialize JavaScript ke superset JSON yang mencakup ekspresi, tanggal, dan fungsi reguler.
Kode dalam paket ini memulai hidupnya sebagai modul internal untuk mengekspresikan negara. Untuk memperluas kegunaannya, sekarang hidup sebagai serialize-javascript -paket independen di NPM.
Anda mungkin bertanya -tanya: bagaimana dengan JSON.stringify() !? Kami telah menemukan bahwa kadang -kadang kami perlu membuat serial fungsi JavaScript, regexps , tanggal , set atau peta . Contoh yang bagus adalah aplikasi web yang menggunakan perutean URL sisi klien di mana definisi rute adalah RegExps yang perlu dibagikan dari server ke klien. Tetapi modul ini juga bagus untuk berkomunikasi antara proses node.
String yang dikembalikan dari fungsi ekspor tunggal paket ini adalah javascript literal yang dapat disimpan ke file .js , atau disematkan ke dalam dokumen HTML dengan membuat konten elemen <script> .
Karakter HTML dan terminator garis JavaScript diloloskan secara otomatis.
Harap dicatat bahwa serialisasi untuk set & peta ES6 memerlukan dukungan untuk Array.from (tidak tersedia di IE atau node <0,12), atau Array.from . Dari Polyfill.
Instal menggunakan NPM:
$ npm install serialize-javascript var serialize = require ( 'serialize-javascript' ) ;
serialize ( {
str : 'string' ,
num : 0 ,
obj : { foo : 'foo' } ,
arr : [ 1 , 2 , 3 ] ,
bool : true ,
nil : null ,
undef : undefined ,
inf : Infinity ,
date : new Date ( "Thu, 28 Apr 2016 22:02:17 GMT" ) ,
map : new Map ( [ [ 'hello' , 'world' ] ] ) ,
set : new Set ( [ 123 , 456 ] ) ,
fn : function echo ( arg ) { return arg ; } ,
re : / ([^s]+) / g ,
big : BigInt ( 10 ) ,
url : new URL ( 'https://example.com/' ) ,
} ) ;Di atas akan menghasilkan output string berikut:
'{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,"nil":null,"undef":undefined,"inf":Infinity,"date":new Date("2016-04-28T22:02:17.000Z"),"map":new Map([["hello","world"]]),"set":new Set([123,456]),"fn":function echo(arg) { return arg; },"re":new RegExp("([^\\s]+)", "g"),"big":BigInt("10"),"url":new URL("https://example.com/")}' CATATAN: Untuk menghasilkan string yang dipercantik, Anda dapat melewati argumen kedua opsional untuk serialize() untuk menentukan jumlah ruang yang akan digunakan untuk lekukan.
Fitur utama dari paket ini adalah untuk membuat serial kode ke serangkaian javascript literal yang dapat disematkan dalam dokumen HTML dengan menambahkannya sebagai isi elemen <script> . Untuk membuat ini aman, karakter HTML dan terminator garis JavaScript diloloskan secara otomatis.
serialize ( {
haxorXSS : '</script>'
} ) ;Di atas akan menghasilkan string berikut, output yang ditentukan HTML yang aman untuk dimasukkan ke dalam dokumen HTML karena tidak akan menyebabkan elemen skrip inline berakhir:
'{"haxorXSS":"\u003C\u002Fscript\u003E"}'Anda dapat memberikan argumen
unsafeopsional untukserialize()untuk serialisasi lurus.
Fungsi serialize() menerima objek options sebagai argumen kedua. Semua opsi gagal untuk undefined :
options.space Opsi ini sama dengan argumen space yang dapat diteruskan ke JSON.stringify . Ini dapat digunakan untuk menambahkan spasi putih dan lekukan ke output serial untuk membuatnya lebih mudah dibaca.
serialize ( obj , { space : 2 } ) ; options.isJSON Opsi ini adalah sinyal untuk serialize() bahwa objek yang diserialisasi tidak mengandung fungsi atau nilai regexps apa pun. Ini memungkinkan jalur panas yang memungkinkan serialisasi menjadi lebih dari 3x lebih cepat. Jika Anda membuat serial banyak data, dan tahu JSON murni, maka Anda dapat mengaktifkan opsi ini untuk mempercepat.
Catatan: bahwa saat menggunakan opsi ini, output masih akan melarikan diri untuk melindungi terhadap XSS.
serialize ( obj , { isJSON : true } ) ; options.unsafe Opsi ini adalah menandakan serialize() yang ingin kami lakukan konversi lurus, tanpa perlindungan XSS. Opsi ini perlu diatur secara eksplisit ke true . Karakter HTML dan Terminator Garis JavaScript tidak akan melarikan diri. Anda harus menggulung sendiri.
serialize ( obj , { unsafe : true } ) ; options.ignoreFunction Opsi ini adalah menandakan serialize() yang kami tidak ingin serial fungsi JavaScript. Cukup perlakukan fungsi seperti JSON.stringify do, tetapi fitur lain akan berfungsi seperti yang diharapkan.
serialize ( obj , { ignoreFunction : true } ) ; Untuk beberapa kasus penggunaan, Anda mungkin juga perlu deserialisasi string. Ini secara eksplisit bukan bagian dari modul ini. Namun, Anda dapat dengan mudah menulisnya sendiri:
function deserialize ( serializedJavascript ) {
return eval ( '(' + serializedJavascript + ')' ) ;
} Catatan: Jangan lupa tanda kurung di sekitar javascript serial, karena braket pembuka { akan dianggap sebagai awal tubuh.
Perangkat lunak ini bebas digunakan di bawah Yahoo! Lisensi BSD Inc. Lihat file lisensi untuk teks lisensi dan informasi hak cipta.