Saya menemukan tiga cara untuk melemparkan variabel ke String
dalam JavaScript.
Saya mencari tiga opsi dalam kode sumber jQuery, dan semuanya digunakan .
Saya ingin tahu apakah ada perbedaan di antara mereka:
value.toString()
String(value)
value + ""
Mereka semua menghasilkan output yang sama, tetapi apakah salah satu dari mereka lebih baik daripada yang lain?
Saya akan mengatakan + ""
memiliki kelebihan yang menghemat beberapa karakter, tetapi itu bukan keuntungan besar, hal lain?
javascript
jquery
string
gdoron mendukung Monica
sumber
sumber
toString()
akan menjadi cara untuk pergi.toString
secara semantik cara paling jelas untuk mendokumentasikan diri sendiri fakta bahwa Anda mencoba untuk mendapatkan string yang setara dengan suatu objek.String(...)
sedikit tumpul, danvalue + ""
sedikit peretasan. Ini juga memberi Anda kemampuan untuk menimpa defaulttoString
dengan implementasi kustom jika Anda pernah perlu saya kira, sebagai manfaat sampingan kecil.+ ""
ini yang tercepat menurut jsperf, jadi ... itu bisa dilakukan dengan cara lain, kurasa.Jawaban:
Mereka berperilaku berbeda saat
value
itunull
.null.toString()
melempar kesalahan - Tidak dapat memanggil metode 'toString' dari nolString(null)
kembali - "null"null + ""
juga mengembalikan - "null"Perilaku yang sangat mirip yang terjadi jika
value
adalahundefined
(lihat jawaban jbabey ini ).Selain itu, ada perbedaan kinerja yang dapat diabaikan, yang, kecuali jika Anda menggunakannya dalam putaran besar, tidak perlu dikhawatirkan.
sumber
toString()
saat Anda belum memeriksanyanull
.null
atauundefined
ke layar adalah perilaku yang lebih diinginkan daripada kesalahan javascript ...v + ''
mengembalikan hasil yang salah jika v memiliki kedua metode toString () dan valueOf (). Penggabungan akan mengabaikan toString () dan akan menggunakan valueOf (). Contoh kelas di mana penyatuanAda perbedaan, tetapi mereka mungkin tidak relevan dengan pertanyaan Anda. Misalnya, prototipe toString tidak ada pada variabel yang tidak terdefinisi, tetapi Anda bisa menggunakan undefined ke string menggunakan dua metode lainnya:
http://jsfiddle.net/f8YwA/
sumber
String()
. Contoh:String(test);
melemparUncaught ReferenceError: test is not defined
, sementaravar test; String(test);
akan menghasilkan"undefined"
.Mereka berperilaku sama tetapi
toString
juga menyediakan cara untuk mengkonversi bilangan biner, oktal, atau string heksadesimal:Contoh:
sumber
Menurut tes JSPerf ini , mereka berbeda dalam kecepatan. Tetapi kecuali jika Anda akan menggunakannya dalam jumlah besar, salah satu dari mereka akan bekerja dengan baik.
Untuk kelengkapan: Seperti yang disebutkan asawyer , Anda juga dapat menggunakan
.toString()
metode ini.sumber
new String()
mengembalikan objek bukan aString
new String()
mengembalikan objek ya.String()
Namun, mengembalikan string, yang merupakan pertanyaan.new String(blarg)
memberi AndaString
objek yang dapat Anda hubungitoString()
. Di debugger Chrome saya, mereka secara efektif menghasilkan objek yang sama kecuali perbedaan kata.Selain semua hal di atas, orang harus mencatat bahwa, untuk nilai yang ditentukan
v
:String(v)
panggilanv.toString()
'' + v
panggilanv.valueOf()
sebelum jenis pemain lainJadi kita bisa melakukan sesuatu seperti:
Diuji dalam FF 34.0 dan Node 0.10
sumber
jika Anda setuju dengan null, undefined, NaN, 0, dan false semua casting ke '' maka
(s ? s+'' : '')
lebih cepat.lihat http://jsperf.com/cast-to-string/8
perhatikan - ada perbedaan yang signifikan antar browser saat ini.
sumber
Nyata contoh dunia: Aku punya fungsi log yang dapat disebut dengan jumlah sewenang-wenang parameter:
log("foo is {} and bar is {}", param1, param2)
. Jika sebuahDEBUG
flag diset ketrue
, tanda kurung diganti dengan parameter yang diberikan dan string diteruskan keconsole.log(msg)
. Parameter dapat dan akan menjadi Strings, Numbers dan apa pun yang dapat dikembalikan oleh panggilan JSON / AJAX, bahkan mungkinnull
.arguments[i].toString()
bukan pilihan, karenanull
nilai yang mungkin (lihat jawaban Connell Watkins)arguments[i] + ""
. Ini mungkin atau mungkin tidak mempengaruhi keputusan tentang apa yang akan digunakan. Beberapa orang secara ketat mematuhi JSLint.sumber
Di halaman ini Anda dapat menguji sendiri kinerja masing-masing metode :)
http://jsperf.com/cast-to-string/2
di sini, di semua mesin dan browser, ' "" + str ' adalah yang tercepat, (String) str adalah yang paling lambat
sumber