Adakah yang tahu apa perbedaan antara kedua metode ini?
String.prototype.slice
String.prototype.substring
javascript
substring
slice
substr
tmim
sumber
sumber
slice
adalah orang dengan perilaku yang paling tidak terduga.slice
sebenarnya bisa menggantikansubstring
dan tidak ada alasan untuk menggunakannya.var a = "asdf".substring(-1);
, itu diperlakukan sebagaivar a = "asdf".substring(0);
. Tidak terkecuali dilempar. Dan jika Anda menggunakanvar a = "asdf".substring(2, -1);
, itu digunakan0
sebagai pengganti-1
(seperti sebelumnya), dan bertukar argumen sehingga bertindak sepertivar a = "asdf".substring(0, 2);
. Saya bahkan mencoba ini di IE 8 dan mendapatkan hasilnya tanpa pengecualianJawaban:
slice()
bekerja sepertisubstring()
dengan beberapa perilaku berbeda.Kesamaan yang mereka miliki:
start
sama denganstop
: mengembalikan string kosongstop
dihilangkan: mengekstraksi karakter ke akhir stringPerbedaan antara :
substring()
start > stop
, makasubstring
akan menukar 2 argumen itu.NaN
, itu diperlakukan seolah-olah itu0
.Perbedaan antara :
slice()
start > stop
,slice()
akan mengembalikan string kosong. (""
)start
negatif: set karakter dari akhir string, persis sepertisubstr()
di Firefox. Perilaku ini diamati di Firefox dan IE.stop
negatif: set berhenti ke:string.length – Math.abs(stop)
(nilai asli), kecuali dibatasi pada 0 (dengan demikian,Math.max(0, string.length + stop)
) sebagaimana tercakup dalam spesifikasi ECMA .Sumber: Seni Dasar Pemrograman & Pengembangan: Javascript: substr () vs substring ()
sumber
slice()
, seharusnyastring.length - stop
slice()
, saya pikir itu harus(string.length – 1) + stop
atau, untuk membuatnya jelas bahwa itu negatif,(string.length – 1) – Math.abs(stop)
String.slice
telah ditambahkan sehingga ada metode string yang konsistenArray.slice
.substring
telah ada di sana selamanya, jadi mereka tidak merusaknya dan menambahkan metode lain. Keputusan yang jelek karena konsistensi 1. bagus dan 2. memungkinkan sintaksis CoffeeScript untuk bekerja pada array dan string. @Oriol: diedit masukstop
akan diatur kestring.length + stop
jikastop
negatif. Ingatstop
adalah indeks setelah karakter terakhir diekstraksi!Catatan: jika Anda sedang terburu-buru, dan / atau mencari jawaban singkat gulir ke bagian bawah jawaban, dan baca dua baris terakhir. Jika tidak terburu-buru baca semuanya.
izinkan saya memulai dengan menyatakan fakta:
Sintaks:
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
Catatan # 1:
slice()==substring()
Apa itu?
The
slice()
Metode ekstrak bagian string dan kembali bagian-bagian diekstrak dalam string baru.The
substr()
Metode ekstrak bagian string, dimulai pada karakter pada posisi tertentu, dan kembali jumlah tertentu dari karakter.The
substring()
Metode ekstrak bagian string dan kembali bagian-bagian diekstrak dalam string baru.Catatan 2:
slice()==substring()
Mengubah String Asli?
slice()
Tidaksubstr()
Tidaksubstring()
TidakCatatan # 3:
slice()==substring()
Menggunakan Bilangan Negatif sebagai Argumen:
slice()
memilih karakter mulai dari akhir string,substr()
memilih karakter mulai dari akhir stringsubstring()
Tidak MelakukanCatatan # 3:
slice()==substr()
jika Argumen Pertama Lebih Besar dari Argumen Kedua:
slice()
Tidak Berperansubstr()
karena Argumen Kedua BUKAN posisi, tetapi nilai panjang, itu akan berfungsi seperti biasa, tanpa masalahsubstring()
akan menukar kedua argumen, dan berkinerja seperti biasaArgumen Pertama:
slice()
Diperlukan, menunjukkan: Indeks Awalsubstr()
Dibutuhkan, menunjukkan: Indeks Awalsubstring()
Diperlukan, menunjukkan: Indeks AwalCatatan # 4:
slice()==substr()==substring()
Argumen Kedua:
slice()
Opsional, Posisi (hingga, tetapi tidak termasuk) di mana untuk mengakhiri ekstraksisubstr()
Opsional, Jumlah karakter untuk mengekstraksisubstring()
Opsional, Posisi (hingga, tetapi tidak termasuk) di mana untuk mengakhiri ekstraksiCatatan # 5:
slice()==substring()
Bagaimana jika Argumen Kedua Dihilangkan?
slice()
memilih semua karakter dari posisi awal hingga akhir string,substr()
memilih semua karakter dari posisi awal hingga akhir string,substring()
memilih semua karakter dari posisi awal hingga akhir string.Catatan # 6:
slice()==substr()==substring()
jadi, Anda dapat mengatakan bahwa ada perbedaan antara
slice()
dansubstr()
, sementarasubstring()
pada dasarnya adalah salinanslice()
.dalam Ringkasan:
jika Anda tahu indeks (posisi) tempat Anda akan berhenti (tetapi TIDAK termasuk), Gunakan
slice()
jika Anda tahu panjang karakter yang akan diekstraksi, gunakan
substr()
.sumber
Ben Nadel telah menulis artikel yang bagus tentang ini, ia menunjukkan perbedaan dalam parameter untuk fungsi-fungsi ini:
Dia juga menunjukkan bahwa jika parameter untuk slice negatif, mereka mereferensikan string dari akhir. Substring dan substring tidak.
Inilah artikelnya tentang ini.
sumber
'0123456789'.substr(-3, 2) -> '78'
Satu jawaban baik-baik saja tetapi membutuhkan sedikit bacaan. Apalagi dengan terminologi baru "berhenti".
My Go - diorganisasikan oleh perbedaan untuk menjadikannya bermanfaat di samping jawaban pertama oleh Daniel di atas:
1) indeks negatif. Substring memerlukan indeks positif dan akan menetapkan indeks negatif menjadi 0. Indeks negatif slice berarti posisi dari ujung string.
2) Pertukaran indeks. Substring akan menyusun ulang indeks untuk membuat indeks pertama kurang dari atau sama dengan indeks kedua.
--------------------------
Komentar umum - Saya merasa aneh bahwa indeks kedua adalah posisi setelah karakter terakhir dari slice atau substring. Saya harapkan "1234" .slice (2,2) mengembalikan "3". Ini membuat kebingungan Andy di atas dibenarkan - saya harapkan "1234" .slice (2, -1) mengembalikan "34". Ya, ini berarti saya baru mengenal Javascript. Ini juga berarti perilaku ini:
2c saya
sumber
Perbedaan antara substring dan slice - adalah bagaimana mereka bekerja dengan argumen negatif dan menghadap garis luar negeri:
substring (mulai, akhir)
Argumen negatif ditafsirkan sebagai nol. Nilai terlalu besar dipotong ke panjang string: alert ("testme" .substring (-2)); // "testme", -2 menjadi 0
Selanjutnya, jika mulai> akhir, argumen dipertukarkan, yaitu garis plot mengembalikan antara awal dan akhir:
mengiris
Nilai negatif diukur dari akhir baris:
Ini jauh lebih nyaman daripada substring logika aneh.
Nilai negatif dari parameter pertama untuk substr yang didukung di semua browser kecuali IE8-.
Jika pilihan salah satu dari tiga metode ini, untuk digunakan dalam sebagian besar situasi - itu akan menjadi irisan : argumen negatif dan itu mempertahankan dan beroperasi paling jelas.
sumber
substr: Ini memberi kita untuk mengambil bagian dari string berdasarkan indeks yang ditentukan. sintaks dari substr- string.substr (start, end) start - indeks awal memberitahu di mana mulai mengambil. end - end index memberitahu sampai dimana string mengambil. Itu opsional.
slice: Ini menyediakan untuk mengambil bagian dari string berdasarkan indeks yang ditentukan. Ini memungkinkan kita untuk menentukan positif dan indeks. sintaks dari slice - string.slice (start, end) start - start index memberitahu di mana pengambilan awal. Indeks end - end memberitahu sampai ke mana string mengambil. Itu opsional. Dalam 'splice' baik indeks awal dan akhir membantu untuk mengambil indeks positif dan negatif.
kode sampel untuk 'slice' dalam string
kode sampel untuk 'substring' dalam string
[* Catatan: pengindeksan negatif dimulai pada akhir string.]
sumber
Satu-satunya perbedaan antara metode slice dan substring adalah argumen
Keduanya mengambil dua argumen misalnya mulai / dari dan akhir / ke.
Anda tidak bisa memberikan nilai negatif sebagai argumen pertama untuk metode substring tetapi untuk metode slice untuk melewatinya dari akhir.
Rincian argumen metode slice:
REF: http://www.thesstech.com/javascript/string_slice_method
Argumen
Indeks start_index dari mana slice harus dimulai. Jika nilai diberikan dalam negatif itu berarti mulai dari yang terakhir. mis. -1 untuk karakter terakhir. Indeks end_index setelah akhir slice. Jika tidak disediakan, slice akan diambil dari start_index ke akhir string. Dalam hal indeks nilai negatif akan diukur dari ujung tali.
Rincian argumen metode substring:
REF: http://www.thesstech.com/javascript/string_substring_method
Argumen
from Ini harus berupa bilangan bulat non negatif untuk menentukan indeks dari mana sub-string harus dimulai. to Integer non negatif opsional untuk memberikan indeks sebelum sub-string yang harus diselesaikan.
sumber
Sebab
slice(start, stop)
, jikastop
negatif,stop
akan diatur ke:daripada:
sumber