Nilai dalam JavaScript selalu bertipe tertentu. Misalnya, string atau angka.
Ada delapan tipe data dasar dalam JavaScript. Di sini, kita akan membahasnya secara umum dan di bab berikutnya kita akan membahas masing-masingnya secara mendetail.
Kita bisa memasukkan tipe apa pun ke dalam variabel. Misalnya, suatu variabel suatu saat bisa menjadi string dan kemudian menyimpan angka:
// tidak ada kesalahan biarkan pesan = "halo"; pesan = 123456;
Bahasa pemrograman yang memungkinkan hal-hal seperti itu, seperti JavaScript, disebut “diketik secara dinamis”, yang berarti bahwa terdapat tipe data, namun variabel tidak terikat pada salah satu tipe tersebut.
misalkan n = 123; n = 12,345;
Tipe angka mewakili angka integer dan floating point.
Ada banyak operasi bilangan, misalnya perkalian *
, pembagian /
, penjumlahan +
, pengurangan -
, dan sebagainya.
Selain bilangan biasa, ada yang disebut “nilai numerik khusus” yang juga termasuk dalam tipe data ini: Infinity
, -Infinity
dan NaN
.
Infinity
mewakili Infinity matematika ∞. Ini adalah nilai khusus yang lebih besar dari angka apa pun.
Kita bisa mendapatkannya dengan membaginya dengan nol:
peringatan( 1/0 ); // Ketakterbatasan
Atau cukup referensi langsung:
waspada( Tak terhingga ); // Ketakterbatasan
NaN
mewakili kesalahan komputasi. Hal ini disebabkan oleh operasi matematika yang salah atau tidak terdefinisi, misalnya:
alert("bukan angka" / 2); // NaN, pembagian seperti itu salah
NaN
lengket. Operasi matematika lebih lanjut pada NaN
akan menghasilkan NaN
:
peringatan( NaN + 1 ); // Tidak peringatan( 3 * NaN ); // Tidak alert("bukan angka" / 2 - 1 ); // Tidak
Jadi, jika ada NaN
di suatu tempat dalam ekspresi matematika, ia akan menyebar ke seluruh hasil (hanya ada satu pengecualian untuk itu: NaN ** 0
is 1
).
Operasi matematika aman
Mengerjakan matematika adalah “aman” dalam JavaScript. Kita bisa melakukan apa saja: membaginya dengan nol, memperlakukan string non-numerik sebagai angka, dan sebagainya.
Script tidak akan pernah berhenti pada kesalahan fatal (“mati”). Paling buruk, kita akan mendapatkan NaN
sebagai hasilnya.
Nilai numerik khusus secara formal termasuk dalam tipe “angka”. Tentu saja itu bukanlah angka dalam pengertian umum kata ini.
Kita akan melihat lebih banyak tentang bekerja dengan angka di bab Angka.
Dalam JavaScript, tipe “angka” tidak dapat dengan aman mewakili nilai bilangan bulat yang lebih besar dari (2 53 -1)
(yaitu 9007199254740991
), atau kurang dari -(2 53 -1)
untuk negatif.
Tepatnya, tipe “angka” dapat menyimpan bilangan bulat yang lebih besar (hingga 1.7976931348623157 * 10 308
), namun di luar rentang bilangan bulat yang aman ±(2 53 -1)
akan terjadi kesalahan presisi, karena tidak semua digit cocok ke dalam penyimpanan tetap 64-bit. Jadi nilai “perkiraan” dapat disimpan.
Misalnya, kedua angka ini (tepat di atas rentang aman) adalah sama:
konsol.log(9007199254740991 + 1); // 9007199254740992 konsol.log(9007199254740991 + 2); // 9007199254740992
Jadi bisa dikatakan, semua bilangan bulat ganjil yang lebih besar dari (2 53 -1)
tidak dapat disimpan sama sekali dalam tipe “angka”.
Untuk sebagian besar tujuan rentang ±(2 53 -1)
sudah cukup, namun terkadang kita memerlukan seluruh rentang bilangan bulat yang sangat besar, misalnya untuk kriptografi atau stempel waktu dengan presisi mikrodetik.
Tipe BigInt
baru-baru ini ditambahkan ke bahasa untuk mewakili bilangan bulat dengan panjang berapa pun.
Nilai BigInt
dibuat dengan menambahkan n
ke akhir bilangan bulat:
// huruf "n" di akhir berarti BigInt const bigInt = 1234567890123456789012345678901234567890n;
Karena nomor BigInt
jarang diperlukan, kami tidak membahasnya di sini, tetapi mengkhususkannya dalam bab terpisah tentang BigInt. Bacalah ketika Anda membutuhkan angka sebesar itu.
Sebuah string dalam JavaScript harus diapit oleh tanda kutip.
biarkan str = "Halo"; let str2 = 'Kutipan tunggal juga boleh'; let frase = `dapat menyematkan ${str}` lain;
Di JavaScript, ada 3 jenis kutipan.
Kutipan ganda: "Hello"
.
Kutipan tunggal: 'Hello'
.
Tanda centang belakang: `Hello`
.
Kutipan ganda dan tunggal adalah kutipan “sederhana”. Praktis tidak ada perbedaan di antara keduanya dalam JavaScript.
Backticks adalah kutipan “fungsionalitas yang diperluas”. Mereka memungkinkan kita untuk menyematkan variabel dan ekspresi ke dalam string dengan membungkusnya dalam ${…}
, misalnya:
biarkan nama = "John"; // menyematkan variabel peringatan(`Halo, ${nama}!` ); // Halo, John! // menyematkan ekspresi alert( `hasilnya ${1 + 2}` ); // hasilnya 3
Ekspresi di dalam ${…}
dievaluasi dan hasilnya menjadi bagian dari string. Kita bisa memasukkan apa saja ke dalamnya: variabel seperti name
atau ekspresi aritmatika seperti 1 + 2
atau sesuatu yang lebih kompleks.
Harap dicatat bahwa ini hanya dapat dilakukan di backticks. Kutipan lain tidak memiliki fungsi penyematan ini!
alert("hasilnya ${1+2}"); // hasilnya adalah ${1 + 2} (tanda kutip ganda tidak menghasilkan apa-apa)
Kita akan membahas string secara lebih mendalam pada bab Strings.
Tidak ada tipe karakter .
Dalam beberapa bahasa, ada tipe “karakter” khusus untuk satu karakter. Misalnya dalam bahasa C dan Java disebut “char”.
Di JavaScript, tidak ada tipe seperti itu. Hanya ada satu jenis: string
. Sebuah string dapat terdiri dari nol karakter (kosong), satu karakter, atau banyak karakter.
Tipe boolean hanya mempunyai dua nilai: true
dan false
.
Tipe ini biasanya digunakan untuk menyimpan nilai ya/tidak: true
berarti “ya, benar”, dan false
berarti “tidak, salah”.
Misalnya:
biarkan nameFieldChecked = true; // ya, kolom nama dicentang biarkan ageFieldChecked = false; // tidak, kolom usia tidak dicentang
Nilai Boolean juga muncul sebagai hasil perbandingan:
misalkan Lebih Besar = 4 > 1; waspada( lebih besar ); // benar (hasil perbandingannya adalah "ya")
Kita akan membahas boolean lebih dalam pada bab Operator logika.
Nilai null
khusus bukan milik tipe apa pun yang dijelaskan di atas.
Ini membentuk tipe tersendiri yang hanya berisi nilai null
:
misalkan umur = null;
Dalam JavaScript, null
bukanlah “referensi ke objek yang tidak ada” atau “penunjuk null” seperti dalam beberapa bahasa lain.
Itu hanya nilai khusus yang mewakili “tidak ada”, “kosong” atau “nilai tidak diketahui”.
Kode di atas menyatakan bahwa age
tidak diketahui.
Nilai khusus undefined
juga menonjol. Itu membuat tipenya sendiri, seperti null
.
Arti dari undefined
adalah “nilai tidak diberikan”.
Jika suatu variabel dideklarasikan, namun tidak ditetapkan, maka nilainya undefined
:
biarkan menua; peringatan (usia); // menampilkan "tidak terdefinisi"
Secara teknis, dimungkinkan untuk secara eksplisit menetapkan undefined
ke suatu variabel:
misalkan umur = 100; // ubah nilainya menjadi tidak terdefinisi usia = tidak ditentukan; peringatan (usia); // "belum diartikan"
…Tetapi kami tidak menyarankan melakukan hal itu. Biasanya, seseorang menggunakan null
untuk menetapkan nilai "kosong" atau "tidak diketahui" ke suatu variabel, sementara undefined
dicadangkan sebagai nilai awal default untuk hal-hal yang belum ditetapkan.
Jenis object
istimewa.
Semua tipe lainnya disebut “primitif” karena nilainya hanya dapat berisi satu hal (baik itu string, angka, atau apa pun). Sebaliknya, objek digunakan untuk menyimpan kumpulan data dan entitas yang lebih kompleks.
Karena begitu pentingnya, benda-benda berhak mendapat perlakuan khusus. Kita akan membahasnya nanti di bab Objek, setelah kita belajar lebih banyak tentang primitif.
Tipe symbol
digunakan untuk membuat pengidentifikasi unik untuk objek. Kami harus menyebutkannya di sini demi kelengkapan, tetapi juga menunda detailnya sampai kami mengetahui objeknya.
Operator typeof
mengembalikan tipe operan. Ini berguna ketika kita ingin memproses nilai dengan tipe berbeda secara berbeda atau hanya ingin melakukan pemeriksaan cepat.
Panggilan ke typeof x
mengembalikan string dengan nama tipe:
typeof tidak terdefinisi // "tidak terdefinisi" ketik 0 // "angka" ketik 10n // "besar" tipe benar // "boolean" ketik "foo" // "string" typeof Simbol("id") // "simbol" typeof Matematika // "objek" (1) typeof null // "objek" (2) typeof alert // "fungsi" (3)
Tiga baris terakhir mungkin memerlukan penjelasan tambahan:
Math
adalah objek bawaan yang menyediakan operasi matematika. Kita akan mempelajarinya pada bab Bilangan. Di sini, ini hanya berfungsi sebagai contoh suatu objek.
Hasil dari typeof null
adalah "object"
. Itu adalah kesalahan yang diakui secara resmi dalam typeof
, berasal dari masa awal JavaScript dan disimpan untuk kompatibilitas. Jelasnya, null
bukanlah sebuah objek. Ini adalah nilai khusus dengan tipe tersendiri. Perilaku typeof
salah di sini.
Hasil dari typeof alert
adalah "function"
karena alert
adalah sebuah fungsi. Kita akan mempelajari fungsi di bab berikutnya dan kita juga akan melihat bahwa tidak ada tipe “fungsi” khusus di JavaScript. Fungsi termasuk dalam tipe objek. Namun typeof
memperlakukannya secara berbeda, mengembalikan "function"
. Itu juga berasal dari masa awal JavaScript. Secara teknis, perilaku seperti itu tidak benar, namun dalam praktiknya bisa jadi nyaman.
Sintaks typeof(x)
Anda mungkin juga menemukan sintaksis lain: typeof(x)
. Itu sama dengan typeof x
.
Sederhananya: typeof
adalah operator, bukan fungsi. Tanda kurung di sini bukan bagian dari typeof
. Ini adalah jenis tanda kurung yang digunakan untuk pengelompokan matematika.
Biasanya, tanda kurung tersebut berisi ekspresi matematika, seperti (2 + 2)
, tetapi di sini hanya berisi satu argumen (x)
. Secara sintaksis, mereka memungkinkan untuk menghindari spasi antara operator typeof
dan argumennya, dan beberapa orang menyukainya.
Beberapa orang lebih menyukai typeof(x)
, meskipun sintaks typeof x
jauh lebih umum.
Ada 8 tipe data dasar dalam JavaScript.
Tujuh tipe data primitif:
number
untuk bilangan apa pun: bilangan bulat atau titik mengambang, bilangan bulat dibatasi oleh ±(2 53 -1)
.
bigint
untuk bilangan bulat dengan panjang sembarang.
string
untuk string. Sebuah string mungkin memiliki nol atau lebih karakter, tidak ada tipe karakter tunggal yang terpisah.
boolean
untuk true
/ false
.
null
untuk nilai yang tidak diketahui – tipe mandiri yang memiliki nilai tunggal null
.
undefined
untuk nilai yang belum ditetapkan – tipe mandiri yang memiliki nilai tunggal undefined
.
symbol
untuk pengidentifikasi unik.
Dan satu tipe data non-primitif:
object
untuk struktur data yang lebih kompleks.
Operator typeof
memungkinkan kita melihat tipe mana yang disimpan dalam suatu variabel.
Biasanya digunakan sebagai typeof x
, tetapi typeof(x)
juga dimungkinkan.
Mengembalikan string dengan nama tipenya, seperti "string"
.
Karena null
mengembalikan "object"
– ini adalah kesalahan dalam bahasa, ini sebenarnya bukan objek.
Pada bab-bab berikutnya, kita akan berkonsentrasi pada nilai-nilai primitif dan setelah kita terbiasa dengannya, kita akan beralih ke objek.
pentingnya: 5
Apa keluaran skripnya?
biarkan nama = "Ilya"; peringatan( `halo ${1}` ); // ? peringatan(`halo ${"nama"}` ); // ? peringatan( `halo ${nama}` ); // ?
Backticks menyematkan ekspresi di dalam ${...}
ke dalam string.
biarkan nama = "Ilya"; //ekspresinya adalah angka 1 peringatan( `halo ${1}` ); // halo 1 //ekspresinya berupa string "nama" peringatan(`halo ${"nama"}` ); // Halo nama //ekspresinya adalah variabel, sematkan peringatan( `halo ${nama}` ); // halo Ilya