Ekspresi adalah kode yang menghasilkan sebuah nilai, dan operator adalah simbol yang menggabungkan nilai-nilai menjadi ekspresi baru. Topik ini menelusuri operator yang paling sering dipakai sehari-hari, mulai dari aritmetika, increment dan decrement yang menaikkan serta menurunkan nilai satu per satu, operator logika dengan short-circuit, sampai operator ternary dan penggabungan string. Satu pratayang optional chaining juga disertakan sebagai pengantar menuju modul object dan array. Semua contoh dapat dijalankan dengan Node.js dan keluarannya ditampilkan apa adanya.
Operator aritmetika#
Operator aritmetika JavaScript mencakup penjumlahan, pengurangan, perkalian, pembagian, sisa pembagian, dan perpangkatan, ditambah tanda minus untuk nilai negatif. Empat yang pertama berperilaku seperti matematika biasa. Operator % menghasilkan sisa pembagian, bukan hasil baginya, dan operator ** menghitung perpangkatan. Contoh berikut menjalankan semuanya sekali agar keluarannya dapat dilihat sekaligus.
console.log(7 + 3);
console.log(7 - 3);
console.log(7 * 3);
console.log(7 / 2);
console.log(7 % 2);
console.log(2 ** 10);10
4
21
3.5
1
1024Baris 7 % 2 menghasilkan 1 karena 7 dibagi 2 bersisa 1, sedangkan 2 ** 10 menghasilkan 1024 dari dua pangkat sepuluh. Operator % sering dipakai untuk memeriksa habis dibagi, misalnya menentukan bilangan genap dengan nilai sisa 0, dan pola itu muncul terus dalam perulangan. Pembagian 7 / 2 menghasilkan 3.5 dan bukan bilangan bulat yang dipotong, karena seluruh pembagian di JavaScript bekerja pada tipe number tanpa pembedaan bulat dan desimal. Keluaran tipe number yang aneh seperti 0.30000000000000004 sudah dibahas pada topik Tipe data dan berlaku penuh di sini.
Increment dan decrement#
Operator increment ++ menaikkan nilai satu, sedangkan decrement -- menurunkannya satu. Keduanya adalah singkatan dari penugasan ulang yang sama, yaitu stok = stok + 1 dan stok = stok - 1. Posisi operatornya menentukan kapan nilai baru terbaca, dan perbedaannya terlihat pada contoh berikut.
let stok = 10;
stok++;
console.log(stok);
stok--;
console.log(stok);
const sekarang = stok++;
console.log("sekarang:", sekarang, "stok:", stok);11
10
sekarang: 10 stok: 11Bentuk stok++ yang ditulis setelah variabel disebut bentuk postfix. Pada bentuk ini, ekspresi memakai nilai lama terlebih dahulu, baru kenaikan terjadi, sehingga sekarang berisi 10 sementara stok menjadi 11. Bentuk ++stok yang ditulis sebelum variabel menaikkan nilainya lebih dahulu, sehingga nilai baru itulah yang terbaca. Dalam kode yang sederhana, menuliskan penugasan biasa sering lebih jelas daripada menumpuk keduanya dalam satu ekspresi. Gaya ini sekaligus menghindari kebingungan saat kode dibaca ulang beberapa bulan kemudian.
Operator logika dan short-circuit#
Tiga operator logika mengolah nilai boolean, yaitu && untuk dan, || untuk atau, serta ! untuk pembalikan. Perilaku menariknya adalah short-circuit, yaitu sisi kanan tidak dieksekusi bila hasil sudah pasti dari sisi kiri. Selain boolean, && dan || juga mengembalikan salah satu operannya, bukan selalu true atau false.
console.log(true && "aktif");
console.log(false && "aktif");
console.log(null || "nilai cadangan");
console.log("terisi" || "nilai cadangan");
console.log(!true);aktif
false
nilai cadangan
terisi
falseEkspresi true && "aktif" mengembalikan operan kanannya karena sisi kiri sudah pasti benar, sedangkan false && "aktif" langsung mengembalikan false tanpa melihat kanan. Pada ||, nilai cadangan “nilai cadangan” muncul hanya karena sisi kirinya bernilai falsy, dan daftar nilai falsy pada topik Koersi tipe berlaku persis di sini. Pola semacam ini dipakai untuk memberi nilai bawaan atau menjaga pemanggilan fungsi yang mahal. Contoh berikut menunjukkan sisi kanan yang benar-benar tidak berjalan.
function periksaBerkas() {
console.log("fungsi periksaBerkas() dijalankan");
return true;
}
const siapKirim = false && periksaBerkas();
console.log("siapKirim =", siapKirim);siapKirim = falseFungsi periksaBerkas() tidak pernah dijalankan karena sisi kiri bernilai false dan hasilnya sudah pasti, sehingga pesannya tidak pernah muncul di keluaran. Short-circuit bukan optimasi tersembunyi, melainkan aturan evaluasi yang dijamin spesifikasi bahasa. Karena itu pola ini aman dipakai untuk menjaga kode yang menimbulkan efek samping, misalnya pemanggilan fungsi yang hanya boleh berjalan pada kondisi tertentu.
Ternary#
Operator ternary membentuk ekspresi dari tiga bagian, yaitu kondisi, nilai ketika kondisinya benar, dan nilai ketika kondisinya salah, dengan bentuk kondisi ? nilaiA : nilaiB. Ternary menggabungkan if dan else menjadi satu ekspresi, sehingga hasilnya dapat langsung disimpan ke variabel. Percabangan penuh dibahas pada modul alur kendali, sementara di sini cukup dua contoh ringkas.
const nilai = 75;
const hasil = nilai >= 75 ? "lulus" : "remedial";
console.log(hasil);
const poin = 0;
const tampil = poin !== 0 ? poin : "belum ada poin";
console.log(tampil);lulus
belum ada poinBaris pertama keluaran berasal dari kondisi nilai >= 75 yang benar, sedangkan baris kedua menunjukkan peran ternary dalam menangani nilai falsy, karena poin bernilai 0 ditampilkan sebagai teks penjelasan, bukan sebagai angka 0. Ternary paling nyaman untuk memilih di antara dua nilai dalam satu baris. Untuk kondisi yang bertingkat, if dan else jauh lebih mudah dibaca daripada ternary bersarang. Memilih bentuk yang paling jelas untuk dibaca adalah aturan yang berlaku di sini.
Gabungan string dan pratayang optional chaining#
Operator + menggabungkan string ketika salah satu sisinya string, dan inilah cara paling lama untuk merakit teks dari beberapa bagian. Contoh berikut menyusun satu nama lengkap dari dua string dan pemisah spasi.
const depan = "Ali";
const belakang = "Ramdan";
console.log("Nama lengkap: " + depan + " " + belakang);Nama lengkap: Ali RamdanPenggabungan dengan + masih banyak dipakai dan tetap sah, sedangkan template literal pada topik String dan template literal menyediakan cara yang lebih rapi untuk pola semacam ini. Satu operator lain layak dikenalkan sejak sekarang karena sering muncul di kode modern. Optional chaining ditulis ?., yaitu operator yang mengembalikan undefined alih-alih menghentikan program ketika jalur properti yang diminta tidak ada. Contoh singkat berikut cukup untuk mengenalinya, dan pembahasan lengkapnya ada pada modul object dan array.
const karya = { judul: "Catatan kecil", penulis: { nama: "Dewi" } };
const karyaAnonim = { judul: "Tanpa judul" };
console.log(karya.penulis?.nama);
console.log(karyaAnonim.penulis?.nama);Dewi
undefinedBaris kedua menghasilkan undefined karena karyaAnonim tidak memiliki properti penulis, dan tanpa ?. baris yang sama akan berhenti dengan pesan error. Pratayang sebatas ini yang dibutuhkan sekarang, sedangkan variasi dan jebakannya dibahas pada modul object dan array. Sementara itu, sisa operator JavaScript lain tidak perlu dihafal sekarang. Daftar di atas sudah menutup kebutuhan membaca kode pada seluruh modul dasar bahasa ini.
Ringkasan#
- Operator aritmetika mencakup
+,-,*,/,%untuk sisa bagi, dan**untuk perpangkatan. ++dan--menaikkan atau menurunkan satu, dan posisi operator menentukan nilai yang terbaca.&&dan||mengembalikan salah satu operannya dengan short-circuit, sehingga sisi kanan boleh tidak dieksekusi.- Ternary memilih antara dua nilai dalam satu ekspresi, dan
?.mengembalikanundefineduntuk jalur properti yang tidak ada.
Referensi#
- JavaScript — MDN Web Docs — Daftar lengkap operator JavaScript beserta aturan evaluasinya.
- The Modern JavaScript Tutorial — javascript.info — Bab operator dasar dan operator logika beserta contoh pemakaiannya.