Apa perbedaan antara substring dan substring?

844

Apa perbedaan antara

alert("abc".substr(0,2));

dan

alert("abc".substring(0,2));

Keduanya tampaknya menghasilkan "ab".

Perbedaan mesin
sumber
13
@Derek 朕 會 功夫 Catatan, substring mengungguli semua yang lain di Chrome akhir-akhir ini.
Steven Lu
4
Menambahkan komentar ke @Derek ... Tidak seperti slicemetode ini, substringtidak menangani penyesuaian untuk parameter negatif.
Dzeimsas Zvirblis
1
Saya pikir pertanyaan yang lebih penting adalah "mengapa JavaScript memiliki substrmetode dan substringmetode"? Ini benar-benar metode kelebihan beban yang disukai?
Sinjai
7
Sampai hari ini, MDN memiliki peringatan merah besar tentang substr()menjadi apa yang Anda sebut "pseudo-deprecated" di bagian atas halaman dokumen di sini: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - Adakah yang memiliki informasi lebih lanjut tentang hal ini, misalnya apakah ada browser yang berencana untuk benar-benar usang substr()pada suatu saat di masa depan? Atau seperti yang disarankan Steven Lu, mungkinkah ada kerugian kinerja untuk menggunakan substr()maju?
jamess

Jawaban:

930

Perbedaannya ada pada argumen kedua. Argumen kedua substringadalah indeks untuk berhenti (tetapi tidak termasuk), tetapi argumen kedua substradalah panjang maksimum untuk kembali.

Tautan?

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substr

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substring

Delan Azabani
sumber
61
Kedengarannya seperti sumber kesalahan umum. Senang mengetahui perbedaannya. Ditemukan komentar tambahan tentang ini di sini: rapd.wordpress.com/2007/07/12/javascript-substr-vs-substring
schnaader
3
@ Maaf juga saat Anda menginginkannya di akhir string (tanpa argumen kedua)
André Chalella
Ini sangat konyol sehingga saya hampir ketinggalan zaman mengembangkan applet Java. ('Hampir', karena kami harus khawatir tentang IE saat itu.)
Michael Scheper
2
Anda juga harus menyebutkan perbedaan pada argumen pertama, yang bisa negatif untuk substr (dalam hal ini dimulai dari akhir), tetapi tidak untuk substring. Lihat jawaban JefferMC, tetapi memiliki begitu banyak suara sehingga banyak orang mungkin kehilangan bagian penting ini.
youen
2
Karena ini adalah jawaban yang paling banyak dipilih, mungkin harus diedit untuk memasukkan yang String.prototype.substr()sudah usang ... (Hal ini didefinisikan dalam Lampiran B standar ECMA-262, yang pengantarnya menyatakan: "... Pemrogram tidak boleh menggunakan atau menganggap keberadaan fitur dan perilaku ini saat menulis kode skrip ECMAS baru.… ")
TS
309

substring( MDN ) mengambil parameter sebagai (from, to).
substr( MDN ) mengambil parameter sebagai (from, length).

Pembaruan : MDN mempertimbangkan substrwarisan.

alert("abc".substr(1,2)); // returns "bc"
alert("abc".substring(1,2)); // returns "b"

Anda dapat ingat substringmengambil indeks, seperti halnya metode ekstraksi string lain, slice .

Ketika mulai dari 0 Anda dapat menggunakan metode mana pun.

Colin Hebert
sumber
140
.substring()mengambil indeks. Anda dapat mengingatnya karena itu satu-satunya dengan huruf 'i' di namanya. .slice()mengambil indeks juga.
colllin
10
@colllin, komentar tentang i dan indeks itu pasti harus dipindahkan ke jawabannya!
MyDaftQuestions
35

Seperti yang ditunjukkan dalam jawaban yatima2975, ada perbedaan tambahan:

substr()menerima posisi awal yang negatif sebagai ofset dari ujung tali. substring()tidak.

Dari MDN :

Jika mulai negatif, substr () menggunakannya sebagai indeks karakter dari akhir string.

Jadi untuk meringkas perbedaan fungsional:

substring(begin-offset, end-offset-exclusive)di mana mulai-offset 0atau lebih besar

substr(begin-offset, length) di mana mulai-offset juga bisa negatif

JefferMC
sumber
25

Gotcha lain yang baru-baru ini saya temui adalah bahwa di IE 8, secara "abcd".substr(-1)keliru mengembalikan "abcd", sedangkan Firefox 3,6 kembali "d"sebagaimana mestinya.sliceberfungsi dengan baik pada keduanya.

Lebih lanjut tentang topik ini dapat ditemukan di sini .

yatima2975
sumber
17

Perbedaan utamanya adalah itu

substr () memungkinkan Anda menentukan panjang maksimum untuk kembali

substring () memungkinkan Anda untuk menentukan indeks dan argumen kedua TIDAK inklusif

Ada beberapa seluk-beluk tambahan antara substr () dan substring () seperti penanganan argumen yang sama dan argumen negatif. Perhatikan juga substring () dan slice () yang serupa tetapi tidak selalu sama.

  //*** length vs indices:
    "string".substring(2,4);  // "ri"   (start, end) indices / second value is NOT inclusive
    "string".substr(2,4);     // "ring" (start, length) length is the maximum length to return
    "string".slice(2,4);      // "ri"   (start, end) indices / second value is NOT inclusive

  //*** watch out for substring swap:
    "string".substring(3,2);  // "r"    (swaps the larger and the smaller number)
    "string".substr(3,2);     // "in"
    "string".slice(3,2);      // ""     (just returns "")

  //*** negative second argument:
    "string".substring(2,-4); // "st"   (converts negative numbers to 0, then swaps first and second position)
    "string".substr(2,-4);    // ""
    "string".slice(2,-4);     // ""

  //*** negative first argument:
    "string".substring(-3);   // "string"        
    "string".substr(-3);      // "ing"  (read from end of string)
    "string".slice(-3);       // "ing"        
Nate Lipp
sumber
Anda melewatkan "argumen negatif kedua" yang berguna untuk slice:"string".slice(2,-2); // "ri"
Paul
8

Perbedaannya adalah parameter kedua. Parameter kedua mereka, sementara kedua angka, mengharapkan dua hal yang berbeda:

Saat menggunakan substring, parameter kedua adalah indeks pertama yang tidak menyertakan:

var s = "string";
s.substring(1, 3); // would return 'tr'

var s = "another example";
s.substring(3, 7); // would return 'ther'

Saat menggunakan substring, parameter kedua adalah jumlah karakter untuk dimasukkan dalam substring:

var s = "string";
s.substr(1, 3); // would return 'tri'

var s = "another example";
s.substr(3, 7); // would return 'ther ex'
CurnalCurz
sumber
5

Perbedaan besar adalah, substr()adalah metode usang yang masih dapat digunakan, tetapi harus digunakan dengan hati-hati karena mereka diharapkan akan dihapus seluruhnya di masa depan. Anda harus berusaha menghapus penggunaannya dari kode Anda. Dan substring()metode itu berhasil dan menentukan yang sebelumnya.

5ervant
sumber
2
Bisakah Anda menunjuk ke sumber yang dapat diandalkan yang menunjukkan penghentian substr()? Saya telah membacanya dari beberapa orang, tetapi saya tidak dapat menemukan informasi di web yang mendukung pernyataan itu. Plus, Mozilla tidak memasukkannya ke dalam daftar fitur usang / usang: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
DanielM
@DanielM Sejauh yang saya ingat, sudah usang ketika saya memposting jawaban ini, mungkin artikelnya berubah dan sekarang tidak ditinggalkan (tapi tidak yakin) .. Tetapi masih dicatat pada beberapa artikel seperti di sstut.com/javascript/substring- method.php sudah usang.
5ervant
3
@DanielM String.prototype.substr()didefinisikan dalam Lampiran B dari standar ECMA-262, yang pengantarnya menyatakan: "... Pemrogram tidak boleh menggunakan atau mengasumsikan keberadaan fitur dan perilaku ini ketika menulis kode skrip ECMAS baru. ..."
TS
@TS substr()benar-benar dicatat sebagai usang pada beberapa dokumen.
5ervant
2
Ini harus menjadi jawaban yang diterima pada hari ini. Menggunakan fungsi legacy ketika ada alternatif bukan pilihan untuk kode yang baik. Harap jawab jawaban ini untuk membuatnya lebih terlihat saat Google mengarah ke halaman ini.
vbezhenar
4

Metode Iris vs Substr vs Substring vs []

Ada manfaat kinerja untuk masing-masing metode javascript ini. Silakan gunakan fungsi-fungsi ini sesuai.

Ali007
sumber
9
Jawaban ini akan lebih baik jika menyertakan beberapa teks ringkasan di sini mengenai temuan manfaat kinerja yang ditautkan.
2540625
3

substring (): Ini memiliki 2 parameter "start" dan "end".

  • diperlukan parameter mulai dan tentukan posisi di mana memulai ekstraksi.
  • parameter akhir adalah opsional dan menentukan posisi di mana ekstraksi harus berakhir.

Jika parameter akhir tidak ditentukan, semua karakter dari posisi awal hingga akhir string diekstraksi.

var str = "Substring Example";
var result = str.substring(0, 10);
alert(result);

Output : Substring

Jika nilai parameter mulai lebih besar dari nilai parameter akhir, metode ini akan menukar dua argumen. Ini berarti awal akan digunakan sebagai akhir dan akhir akan digunakan sebagai awal.

var str = "Substring Example";
var result = str.substring(10, 0);
alert(result);

Output : Substring

substr () : Ini memiliki 2 parameter "mulai" dan "hitung".

  • diperlukan parameter mulai dan tentukan posisi di mana memulai ekstraksi.

  • parameter hitung adalah opsional dan menentukan jumlah karakter untuk diekstraksi.

var str = "Substr Example";
var result = str.substr(0, 10);
alert(result);


Output : Substr Exa

Jika parameter hitung tidak ditentukan, semua karakter dari posisi awal hingga akhir string diekstraksi. Jika hitung 0 atau negatif, string kosong dikembalikan.

var str = "Substr Example";
var result = str.substr(11);
alert(result);

Output : ple

raju poloju
sumber
2

substring (startIndex, endIndex (tidak termasuk))

substr (startIndex, berapa banyak karakter)

const string = 'JavaScript';

console.log('substring(1,2)', string.substring(1,2)); // a
console.log('substr(1,2)', string.substr(1,2)); // av
Sajith Mantharath
sumber