Jawaban:
Notasi braket sekarang berfungsi di semua browser utama, kecuali untuk IE7 dan di bawahnya.
// Bracket Notation
"Test String1"[6]
// charAt Implementation
"Test String1".charAt(6)
Dulu itu ide yang buruk untuk menggunakan tanda kurung, karena alasan ini ( Sumber ):
Notasi ini tidak berfungsi di IE7. Cuplikan kode pertama akan kembali tidak terdefinisi di IE7. Jika Anda menggunakan notasi braket untuk string di seluruh kode Anda dan Anda ingin bermigrasi
.charAt(pos)
, ini benar-benar menyusahkan: Kurung digunakan di seluruh kode Anda dan tidak ada cara mudah untuk mendeteksi apakah itu untuk string atau array / obyek.Anda tidak dapat mengatur karakter menggunakan notasi ini. Karena tidak ada peringatan dalam bentuk apa pun, ini benar-benar membingungkan dan membuat frustrasi. Jika Anda menggunakan
.charAt(pos)
fungsi ini, Anda tidak akan tergoda untuk melakukannya.
Dari MDN :
Ada dua cara untuk mengakses karakter individu dalam sebuah string. Yang pertama adalah
charAt
metode, bagian dari ECMAScript 3:return 'cat'.charAt(1); // returns "a"
Cara lain adalah memperlakukan string sebagai objek mirip array, di mana masing-masing karakter sesuai dengan indeks numerik. Ini telah didukung oleh sebagian besar browser sejak versi pertama mereka, kecuali untuk IE. Itu distandarisasi dalam ECMAScript 5:
return 'cat'[1]; // returns "a"
Cara kedua membutuhkan dukungan ECMAScript 5 (dan tidak didukung di beberapa browser lama).
Dalam kedua kasus, berusaha mengubah karakter individu tidak akan berfungsi, karena string tidak dapat diubah, yaitu, sifat mereka tidak baik "dapat ditulis" maupun "dapat dikonfigurasi".
str.charAt(i)
lebih baik dari perspektif kompatibilitas jika kompatibilitas IE6 / IE7 diperlukan.str[i]
lebih modern dan berfungsi di IE8 + dan semua browser lainnya (semua Edge / Firefox / Chrome, Safari 2+, semua iOS / Android).Mereka dapat memberikan hasil yang berbeda dalam kasus tepi.
'hello'[NaN] // undefined
'hello'.charAt(NaN) // 'h'
'hello'[true] //undefined
'hello'.charAt(true) // 'e'
Fungsi karakter tergantung pada bagaimana indeks dikonversi ke Nomor dalam spesifikasi .
'hello'[undefined] // undefined
dan'hello'.charAt(undefined) //h
null
bekerja seperti undefined
, tapi lihat ini: "hello"["00"] // undefined
tapi "hello".charAt("00") // "h"
dan"hello"["0"] // "h"
[]
.
.charAt()
melakukan konversi ekstra untuk parameternya menjadi a Number
. FYI, hampir tidak ada perbedaan kinerja saat ini.
String.charAt () adalah standar asli dan berfungsi di semua browser. Di IE 8+ dan browser lain, Anda dapat menggunakan notasi braket untuk mengakses karakter tetapi IE 7 dan di bawahnya tidak mendukungnya.
Jika seseorang benar-benar ingin menggunakan notasi braket di IE 7, lebih baik untuk mengubah string ke array menggunakan str.split('')
dan kemudian menggunakannya sebagai array, kompatibel dengan browser apa pun.
var testString = "Hello";
var charArr = testString.split("");
charArr[1]; // "e"
Hasil yang sangat menarik ketika Anda menguji accessor index string vs charAt()
metode. Tampaknya Chrome adalah satu-satunya browser yang charAt
lebih suka .
index
juga lebih cepat di chrome.
Ada perbedaan ketika Anda mencoba mengakses indeks yang di luar batas atau bukan bilangan bulat.
string[x]
mengembalikan karakter pada x
posisi th string
jika x
bilangan bulat antara 0 dan string.length-1
, dan mengembalikan undefined
sebaliknya.
string.charAt(x)
mualaf x
ke integer menggunakan proses dijelaskan disini (yang pada dasarnya putaran x
bawah jika x
adalah nomor non-integer dan kembali 0 jika parseInt(x)
ini NaN
) dan kemudian kembali karakter pada posisi bahwa jika bilangan bulat adalah antara 0 dan string.length-1
, dan kembali string kosong jika tidak .
Berikut ini beberapa contohnya:
"Hello"[313] //undefined
"Hello".charAt(313) //"", 313 is out of bounds
"Hello"[3.14] //undefined
"Hello".charAt(3.14) //'l', rounds 3.14 down to 3
"Hello"[true] //undefined
"Hello".charAt(true) //'e', converts true to the integer 1
"Hello"["World"] //undefined
"Hello".charAt("World") //'H', "World" evaluates to NaN, which gets converted to 0
"Hello"[Infinity] //undefined
"Hello".charAt(Infinity) //"", Infinity is out of bounds
Perbedaan lain adalah bahwa menugaskan untuk string[x]
tidak melakukan apa-apa (yang dapat membingungkan) dan menugaskan string.charAt(x)
adalah kesalahan (seperti yang diharapkan):
var str = "Hello";
str[0] = 'Y';
console.log(str); //Still "Hello", the above assignment did nothing
str.charAt(0) = 'Y'; //Error, invalid left-hand side in assignment
Alasan mengapa penetapan string[x]
tidak berfungsi adalah karena string Javascript tidak dapat diubah .
"😃".charAt(0)
akan mengembalikan karakter yang tidak dapat digunakan