Apa cara "terbaik" untuk mengonversi angka menjadi string (dalam hal keunggulan kecepatan, keunggulan kejelasan, keunggulan memori, dll)?
Beberapa contoh:
String(n)
n.toString()
""+n
n+""
sumber
Apa cara "terbaik" untuk mengonversi angka menjadi string (dalam hal keunggulan kecepatan, keunggulan kejelasan, keunggulan memori, dll)?
Beberapa contoh:
String(n)
n.toString()
""+n
n+""
seperti ini:
var foo = 45;
var bar = '' + foo;
Sebenarnya, meskipun saya biasanya melakukannya seperti ini untuk kenyamanan sederhana, lebih dari 1.000 iterasi yang muncul untuk kecepatan mentah ada keuntungan untuk.toString()
Lihat tes Kinerja di sini (bukan oleh saya, tetapi ditemukan ketika saya pergi untuk menulis sendiri): http://jsben.ch/#/ghQYR
Tercepat berdasarkan pada tes JSPerf di atas: str = num.toString();
Perlu dicatat bahwa perbedaan dalam kecepatan tidak terlalu signifikan ketika Anda menganggap itu dapat melakukan konversi dengan cara 1 Juta kali dalam 0,1 detik .
Pembaruan: Kecepatan tampaknya sangat berbeda oleh browser. Di Chrome num + ''
tampaknya menjadi yang tercepat berdasarkan tes ini http://jsben.ch/#/ghQYR
Pembaruan 2: Sekali lagi berdasarkan pengujian saya di atas, harus dicatat bahwa Firefox 20.0.1 mengeksekusi .toString()
sekitar 100 kali lebih lambat daripada '' + num
sampel.
'' + 123e-50
pengembalian"1.23e-48"
.null foo
tidak melempar kesalahan.Menurut pendapat saya
n.toString()
mengambil hadiah untuk kejelasannya, dan saya tidak berpikir itu membawa biaya tambahan.sumber
null
,undefined
) Yang tidak berfungsi dengan jawaban ini sulit membuatnya "tidak aman".null
atauundefined
karena spesifik aplikasi, sementara saya membayangkan(n || defaultNumber).toString()
apa yang kebanyakan orang inginkan dalam situasi seperti itu saya sangat tidak setuju kita harus mengerjakan semua pertanyaan. Ini tentang mengonversi angka menjadi string, arsitektur yang bagus, dan konversi jenis lain jika diperlukan, merupakan pelajaran terpisah.Konversi eksplisit sangat jelas bagi seseorang yang baru mengenal bahasa tersebut. Menggunakan tipe paksaan, seperti yang disarankan orang lain, mengarah ke ambiguitas jika pengembang tidak mengetahui aturan paksaan. Pada akhirnya waktu pengembang lebih mahal daripada waktu CPU, jadi saya akan mengoptimalkan untuk yang pertama dengan biaya yang terakhir. Yang sedang berkata, dalam hal ini perbedaannya mungkin diabaikan, tetapi jika tidak saya yakin ada beberapa kompresor JavaScript yang layak yang akan mengoptimalkan hal semacam ini.
Jadi, untuk alasan di atas saya akan pergi dengan:
n.toString()
atauString(n)
.String(n)
mungkin merupakan pilihan yang lebih baik karena itu tidak akan gagal jikan
nol atau tidak ditentukan.sumber
null
, atauundefined
. Jikan
adanull
atauundefined
karena bug dalam program saya, maka saya lebih suka program saya gagal dalam keadaan ini, untuk memberi saya kesempatan lebih baik untuk menemukan dan memperbaiki bug. Program crash adalah hadiah untuk programmer, untuk membantunya menemukan bug :-). Alternatifnya adalah memberikan perangkat lunak yang tidak berfungsi seperti yang dirancang, setelah dengan hati-hati menutupi bug. Jadi, saya bukan penggemar menggunakanString(n)
untuk menutupi kesalahan.String(n)
baik untuk digunakan dalam gaya fungsional, misalnya dengan perpaduan garis bawah_.compose(funcThatNeedsAStringParam, String)
.Sumber
sumber
Jelas-jelas-lidah:
Atau di ES6 Anda cukup menggunakan string template :
sumber
'' + number
metode ini. Ini mengatakan, hasil dari tolok ukur ini sangat bervariasi ketika melakukan beberapa kali sehingga tidak yakin apakah mereka harus dianggap terlalu serius.Jawaban lain sudah mencakup opsi lain, tetapi saya lebih suka yang ini:
Singkat, ringkas, sudah digunakan di banyak tempat lain (jika Anda menggunakan kerangka kerja modern / versi ES) jadi itu taruhan yang aman setiap programmer akan memahaminya.
Bukan berarti (biasanya) penting, tetapi juga tampaknya termasuk yang tercepat dibandingkan dengan metode lain .
sumber
n.toString()
, bukan?n
iniundefined
akan melemparkan kesalahan sintaks dengan menggunakan.toString()
String(n)
dalam semua kasus? Satu-satunya perbedaan adalah bahwa itu kurang jelas.Cara paling sederhana untuk mengonversi variabel apa pun menjadi string adalah dengan menambahkan string kosong ke variabel itu.
sumber
(5.41 + '')
untuk menggunakan metode String seperti.substring()
dan lainJika Anda perlu memformat hasil ke sejumlah tempat desimal tertentu, misalnya untuk mewakili mata uang, Anda memerlukan sesuatu seperti
toFixed()
metode.digits
adalah jumlah digit untuk ditampilkan setelah tempat desimal.sumber
Saya menggunakan https://jsperf.com untuk membuat test case untuk kasus-kasus berikut:
https://jsperf.com/number-string-conversion-speed-comparison
Pada 24 Juli 2018, hasilnya mengatakan itu
number + ''
adalah yang tercepat di Chrome, di Firefox yang terkait dengan string string literal.Keduanya
String(number)
, dannumber.toString()
sekitar 95% lebih lambat daripada opsi tercepat.sumber
Saya suka dua yang pertama karena lebih mudah dibaca. Saya cenderung menggunakan
String(n)
tetapi itu hanya masalah gaya daripada hal lain.Itu kecuali Anda memiliki garis sebagai
yang sangat jelas
sumber
Saya pikir itu tergantung pada situasinya tetapi bagaimanapun Anda dapat menggunakan
.toString()
metode ini karena sangat jelas untuk dipahami.sumber
.toString () adalah fungsi typecasting bawaan, saya bukan ahli dalam perincian itu, tetapi setiap kali kami membandingkan metodologi eksplisit tipe casting ayat bawaan, solusi bawaan selalu lebih disukai.
sumber
Jika saya harus mempertimbangkan semuanya, saya akan menyarankan mengikuti
IMHO, ini cara tercepat untuk mengkonversi ke string. Koreksi saya jika saya salah.
sumber
Satu-satunya solusi yang valid untuk hampir semua kemungkinan kasus yang ada dan yang akan datang (input adalah angka, null, tidak terdefinisi, Simbol, apa pun) adalah
String(x)
. Jangan menggunakan 3 cara untuk operasi sederhana, berdasarkan pada asumsi tipe nilai, seperti "di sini saya mengkonversi pasti angka ke string dan di sini pasti boolean ke string".Penjelasan:
String(x)
menangani nulls, undefined, Symbols, [anything] dan memanggil.toString()
objek.'' + x
panggilan.valueOf()
pada x (casting ke nomor), melempar pada Simbol, dapat memberikan hasil tergantung implementasi.x.toString()
melempar pada nol dan tidak terdefinisi.Catatan:
String(x)
masih akan gagal pada objek yang kurang seperti prototipeObject.create(null)
.Jika Anda tidak menyukai string seperti 'Hello, undefined' atau ingin mendukung objek tanpa prototipe, gunakan fungsi konversi tipe berikut:
sumber
Dengan literal angka, titik untuk mengakses properti harus dibedakan dari titik desimal. Ini memberi Anda opsi berikut jika Anda ingin memohon ke String () pada nomor literal 123:
sumber
Di bawah ini adalah metode untuk mengkonversi Integer ke String di JS
Metode-metode tersebut disusun dalam urutan kinerja yang menurun.
(Hasil tes kinerja diberikan oleh @DarckBlezzer dalam jawabannya)
var num = 1
Metode 1:
num = `$ {num}`
Metode 2:
num = num + ''
Metode 3:
num = String (num)
Metode 4:
num = num.toString ()
Catatan: Anda tidak dapat langsung memanggil tostring () dari suatu nomor
Misalnya: 2.toString () akan membuang Uncaught SyntaxError : Token tidak valid atau tidak terduga
sumber
Jika Anda ingin tahu yang mana yang paling performan periksa ini di mana saya membandingkan semua angka yang berbeda -> Konversi string.
Sepertinya
2+''
atau2+""
yang tercepat.https://jsperf.com/int-2-string
sumber
Kita juga bisa menggunakan konstruktor String . Menurut tolok ukur ini, ini adalah cara tercepat untuk mengonversi Angka menjadi String di Firefox 58 meskipun lebih lambat daripada
" + num
di peramban populer Google Chrome.sumber
Metode
toFixed()
juga akan memecahkan tujuan.sumber
Anda dapat memanggil
Number
objek dan kemudian memanggiltoString()
.Number.call(null, n).toString()
Anda dapat menggunakan trik ini untuk objek asli javascript lainnya.
sumber
Baru saja menemukan ini baru-baru ini, metode 3 dan 4 tidak sesuai karena bagaimana string disalin dan kemudian disatukan. Untuk program kecil masalah ini tidak signifikan, tetapi untuk aplikasi web nyata tindakan ini di mana kita harus berurusan dengan manipulasi string frekuensi dapat mempengaruhi kinerja dan keterbacaan.
Inilah tautan yang dibaca .
sumber
Saya akan mengedit kembali ini dengan lebih banyak data ketika saya punya waktu, karena sekarang ini baik-baik saja ...
Tes dalam simpuljs v8.11.2: 2018/06/06
keluaran
sumber
Tampaknya hasil yang sama ketika menggunakan node.js. Saya menjalankan skrip ini:
dan mendapat hasil sebagai berikut:
Waktu yang sama setiap kali saya menjalankannya.
sumber