Perbedaan dalam 2 String ini (JavaScript)
Saya mencoba membuat variabel tipe data string dengan nilai dalam 2 cara.
- Sebagai string-literal
- Menggunakan Kata Kunci Baru
Tetapi bagi saya tampaknya keduanya berbeda dalam representasi di console.log . Bisakah seseorang memberi tahu saya jika 2nd way tidak mengembalikan string atau bagaimanapun juga berbeda?
var str1 = "abc";
var str2 = new String("def");
console.log(str1);
console.log(str2);
Diharapkan:
abc, def
Keluaran:
Jawaban
JavaScript memiliki dua kategori tipe utama, primitif dan objek.
typeof new String(); // "object"
typeof ''; // "string"
Untuk pernyataan penetapan nilai primitif ke variabel seperti:
var str1 = "Hi";
JavaScript secara internal akan membuat variabel menggunakan:
String("Hi")
Menggunakan kata kunci baru bekerja secara berbeda dan mengembalikan sebuah objek sebagai gantinya.
Memanggil new String(something)membuat objek instance String.
Hasilnya terlihat sama melalui console.log () karena itu hanya akan mengekstrak string primitif dari instance String yang Anda berikan padanya.
Jadi: hanya String () mengembalikan primitif string. String baru ('xyz') mengembalikan objek yang dibuat oleh konstruktor String.
Sangat jarang diperlukan untuk membuat instance String secara eksplisit.
Anda bekerja dengan dua hal yang berbeda. The var str1 = "abc"memberi Anda primitif. Sedangkan the var str2 = new String("def");memberi Anda objek string. Kedua tipe ini berperilaku berbeda
Objek String memungkinkan Anda bekerja dengan serangkaian karakter; itu membungkus tipe data primitif string Javascript dengan sejumlah metode pembantu.
Karena JavaScript secara otomatis mengonversi antara string primitif dan objek String, Anda dapat memanggil salah satu metode pembantu dari objek String pada string primitif.
Saat Anda mencetak objek, sering kali konsol mencetak properti objek.
Jika konsol primitif hanya mencetak nilainya.
Primitif tidak dikotakkan, tetapi jika Anda membuat string dengan konstruktor, string itu dikotakkan di objek dan selalu memiliki properti.
Jika hanya literal, itu hanya memiliki properti ketika Anda mengakses properti string dengan .operator karena tinju terjadi, tetapi setelah itu, itu masih literal tanpa tambahan tambahan, karena itu ketika Anda mencetak "The cat is very grumpy", cukup cetak nilainya dan tidak ada lebih. literal primitif tidak selalu objek dengan properti, hanya objek saat dikotakkan.