Apakah Perbezaan Antara String Primitives dan String Objects dalam JavaScript?
Dalam JavaScript, primitif dan objek ialah dua jenis data yang berbeza. Rentetan literal (cth., "hello") dan rentetan yang dikembalikan daripada panggilan Rentetan tanpa kata kunci baharu ialah rentetan primitif. Walau bagaimanapun, JavaScript menukar primitif kepada objek String dengan lancar, membolehkan akses kepada kaedah objek String untuk rentetan primitif.
Auto-Boxing: A Key Insight
Memang faham, seseorang mungkin menganggap bahawa operasi (panggilan kaedah) pada rentetan primitif akan menjadi lebih perlahan daripada pada objek Rentetan disebabkan oleh langkah penukaran tambahan. Walau bagaimanapun, ujian penanda aras mendedahkan sebaliknya, dengan rentetan primitif mengatasi objek Rentetan dalam kelajuan.
Tingkah laku berlawanan intuitif ini boleh dijelaskan oleh auto-tinju. Apabila rentetan primitif digunakan dalam operasi yang memerlukan objek String, JavaScript secara automatik membalut primitif dalam objek String, menggunakan kaedah yang diperlukan pada objek yang dibalut.
Memeriksa Contoh
Pertimbangkan blok kod berikut:
// Code block-1: Primitive var s = '0123456789'; for (var i = 0; i < s.length; i++) { s.charAt(i); } // Code block-2: String object var s = new String('0123456789'); for (var i = 0; i < s.length; i++) { s.charAt(i); }
Dalam blok kod-1, s ialah rentetan primitif, manakala dalam blok kod-2, s ialah objek Rentetan. Ujian prestasi menunjukkan bahawa kod blok-1 secara konsisten mengatasi kod blok-2, tanpa mengira pelayar yang digunakan.
Mengapa Perbezaan Prestasi?
Faedah prestasi rentetan primitif berpunca daripada struktur data mereka yang lebih mudah. Tidak seperti objek String, rentetan primitif ialah penunjuk ke lokasi memori mentah, membolehkan akses rawak yang lebih pantas.
Apabila JavaScript secara automatik membalut rentetan primitif dalam objek String (auto-tinju), ia dikenakan penalti prestasi yang sedikit disebabkan oleh overhed penciptaan objek. Walau bagaimanapun, panggilan kaedah seterusnya pada rentetan kotak automatik masih lebih pantas daripada menggunakan objek Rentetan secara langsung kerana tinju automatik hanya menggunakan kaedah yang diperlukan tanpa mengubah sifat primitif pembolehubah.
Atas ialah kandungan terperinci Mengapa Rentetan Primitif JavaScript Lebih Cepat Daripada Objek Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!