Kodingan kita sering error? Yuk pahami Strict Mode JavaScript sekarang!

Kodingan kita sering error? Yuk pahami Strict Mode JavaScript sekarang!
Photo by Taiki Ishikawa/Unsplash

Pernah gak sih kita lagi asik ngoding terus tiba tiba muncul error aneh yang bikin pusing tujuh keliling? Rasanya kayak lagi nyari jarum di tumpukan jerami ya. Kita udah bolak balik cek logika tapi kok masih aja ada yang bandel. Nah mungkin ini saatnya kita kenalan lebih dekat dengan satu fitur JavaScript yang asik banget namanya Strict Mode. Fitur ini bisa jadi penyelamat kita dari banyak jebakan dan kesalahan umum yang sering terjadi. Yuk kita selami bersama apa itu Strict Mode dan bagaimana ia bisa bikin kode kita jadi lebih bersih tangguh dan pastinya bebas dari drama error yang bikin kepala berasap.

Apa Itu Strict Mode JavaScript Kenapa Harus Kita Tahu?

Bayangin kita punya aturan main yang lebih ketat dalam sebuah pertandingan. Aturan ini dibikin bukan buat mempersulit tapi justru buat mencegah pemain melakukan kesalahan yang tidak disengaja atau bahkan berpotensi merugikan tim. Nah Strict Mode itu persis kayak gitu di dunia JavaScript. Ini adalah cara kita memilih untuk "ikut aturan yang lebih ketat" untuk kode JavaScript yang kita tulis. Dengan mengaktifkan Strict Mode JavaScript akan bekerja dalam mode yang lebih cermat mendeteksi dan melemparkan error untuk praktik praktik pengkodean yang di masa lalu mungkin cuma dianggap "buruk" atau "silent fail" tanpa peringatan. Intinya ini membantu kita menulis kode yang lebih baik dan lebih terprediksi.

Sejarah Singkat dan Tujuan Utama

Strict Mode diperkenalkan di ECMAScript 5 ES5 sebagai respons terhadap beberapa kelemahan dan inkonsistensi yang ada di versi JavaScript sebelumnya. Sebelum ES5 JavaScript dikenal sebagai bahasa yang sangat permisif alias longgar. Kita bisa aja melakukan kesalahan fatal tapi JavaScript cuma diem aja atau paling parah ngasih hasil yang aneh tanpa pemberitahuan eksplisit. Ini sering bikin developer frustrasi karena sulit banget melacak sumber masalahnya.

Tujuan utama Strict Mode adalah membuat JavaScript menjadi bahasa yang lebih aman. Lebih mudah di debug dan lebih efisien. Ia mengubah cara kerja JavaScript dalam beberapa aspek kunci seperti mengubah kesalahan yang dulunya "silent" menjadi "throw error" melarang beberapa sintaks yang dianggap bermasalah dan mengamankan beberapa perilaku yang berpotensi jadi lubang keamanan atau bug. Jadi kita bisa bilang Strict Mode adalah langkah maju JavaScript untuk menjadi bahasa yang lebih modern dan robust.

Bagaimana Cara Mengaktifkan Strict Mode Simpel Kok!

Mengaktifkan Strict Mode itu gampang banget. Kita cuma perlu menambahkan satu baris kode use strict di tempat yang tepat. Ada dua cara utama untuk mengaktifkannya sesuai dengan kebutuhan kita.

Aktifkan Secara Global untuk Seluruh Skrip Kita

Kalau kita ingin seluruh file JavaScript kita berjalan dalam Strict Mode kita bisa meletakkan use strict di baris paling atas dari file tersebut. Contohnya gini

javascript
"use strict";
// Di sini semua kode kita akan berjalan dalam mode ketat
var x = 10;
// Contoh kesalahan yang akan terdeteksi di sini
// y = 20; // Ini akan menghasilkan ReferenceError karena y tidak dideklarasikan

Penting untuk diingat use strict harus jadi baris kode pertama di file kita. Sebelum kode JavaScript lainnya bahkan sebelum komentar atau deklarasi variabel. Kalau kita taruh di tengah atau di bawah nanti tidak akan berfungsi secara global. Ini adalah cara yang direkomendasikan untuk proyek proyek baru karena secara konsisten menerapkan aturan ketat ke seluruh basis kode kita dari awal. Dengan begini kita jadi terbiasa menulis kode yang bersih dan menghindari masalah dari awal.

Aktifkan Hanya untuk Fungsi Tertentu Saja

Kadang kita punya bagian kode yang memang perlu Strict Mode tapi di bagian lain mungkin ada kode lama yang belum siap atau tidak bisa diubah. Nah use strict juga bisa kita terapkan hanya pada lingkup fungsi tertentu saja. Caranya adalah dengan menempatkan use strict di baris paling atas di dalam badan fungsi tersebut.

javascript
var x = 10; // Ini masih di lingkup non strict modefunction doSomethingStrict() {
  "use strict";
  // Semua kode di dalam fungsi ini akan berjalan dalam Strict Mode
  // z = 30; // Ini akan menghasilkan ReferenceError
  console.log("Di dalam fungsi ini Strict Mode aktif");
}function doSomethingElse() {
  // Fungsi ini tidak di Strict Mode
  y = 20; // Ini tidak akan menghasilkan error di sini karena non strict
  console.log("Di dalam fungsi ini Strict Mode tidak aktif");
}

Dengan cara ini kita bisa secara selektif menerapkan Strict Mode tanpa harus mengubah seluruh basis kode kita sekaligus. Ini sangat berguna saat kita sedang memigrasikan proyek lama atau bekerja dengan pustaka pihak ketiga yang mungkin tidak kompatibel dengan Strict Mode. Namun untuk proyek baru sangat disarankan untuk mengaktifkan Strict Mode secara global agar konsistensi kode tetap terjaga.

Melihat Strict Mode Beraksi Apa Saja yang Dicegahnya?

Sekarang kita akan lihat secara langsung apa saja sih yang Strict Mode cegah dan bagaimana ia bisa menyelamatkan kita dari pusingnya debugging. Ini adalah beberapa contoh umum yang Strict Mode akan deteksi dan langsung dilempar jadi error.

Variabel yang Belum Dideklarasikan Selamat Tinggal Error Tak Terduga

Ini mungkin adalah salah satu fitur Strict Mode yang paling berguna. Di mode non strict kalau kita secara tidak sengaja menginisialisasi variabel tanpa mendeklarasikannya dulu dengan var let atau const JavaScript akan secara otomatis membuat variabel global untuk kita. Ini seringkali menyebabkan bug yang sulit dilacak karena variabel global bisa ditimpa dari mana saja.

javascript
// Mode non strict (misalnya di luar fungsi tanpa "use strict")
function assignWithoutDeclareNonStrict() {
  undeclaredVar = "Halo Dunia"; // Ini akan membuat undeclaredVar menjadi variabel global
  console.log(undeclaredVar); // Output: Halo Dunia
}
assignWithoutDeclareNonStrict();
console.log(undeclaredVar); // Output: Halo Dunia (variabel global)

Dengan Strict Mode upaya untuk menggunakan variabel tanpa mendeklarasikannya akan langsung menghasilkan ReferenceError. Ini memaksa kita untuk selalu mendeklarasikan variabel yang merupakan praktik terbaik dan membuat kode kita jauh lebih terprediksi.

Penulisan Properti Read Only Tak Boleh Sembarangan

JavaScript memiliki properti properti tertentu yang tidak bisa ditimpa atau dihapus misalnya NaN Infinity atau properti pada objek yang diatur sebagai read only. Di mode non strict mencoba menulis ke properti read only biasanya akan gagal secara diam diam tanpa memberi tahu kita ada yang salah.

javascript
// Mode non strict
var objNonStrict = {};
Object.defineProperty(objNonStrict, 'prop', { value: 10, writable: false });
objNonStrict.prop = 20; // Tidak ada error tapi prop tetap 10
console.log(objNonStrict.prop); // Output: 10

Dalam Strict Mode upaya untuk menulis ke properti read only akan menghasilkan TypeError. Ini memastikan kita tidak secara tidak sengaja mencoba memodifikasi data yang seharusnya tidak diubah.

Penghapusan Variabel dan Fungsi Menjadi Terlarang

Di mode non strict kita bisa saja mencoba menghapus variabel atau nama fungsi menggunakan operator delete. Meskipun ini jarang berhasil dan biasanya tidak direkomendasikan JavaScript akan membiarkannya saja tanpa error.

javascript
// Mode non strict
var xNonStrict = 10;
// delete xNonStrict; // Akan mengembalikan false tapi tanpa error
function someFuncNonStrict() {}
// delete someFuncNonStrict; // Akan mengembalikan false tapi tanpa error

Strict Mode akan melemparkan SyntaxError jika kita mencoba menghapus variabel atau fungsi. Ini membuat kita lebih berhati hati dengan apa yang ingin kita hapus dan mencegah potensi kesalahan yang tidak diinginkan.

Nama Parameter Fungsi Ganda Dilarang Keras

Di mode non strict sebuah fungsi bisa memiliki parameter dengan nama yang sama. Meskipun aneh dan hampir tidak pernah berguna JavaScript akan menerimanya dan hanya menggunakan nilai dari parameter terakhir yang dideklarasikan.

javascript
// Mode non strict
function duplicateParamsNonStrict(a, b, a) {
  console.log(a); // Output akan 30 (nilai a yang terakhir)
}
duplicateParamsNonStrict(10, 20, 30);

Dalam Strict Mode mendeklarasikan fungsi dengan nama parameter ganda akan menghasilkan SyntaxError. Ini memastikan definisi fungsi kita jelas dan tidak ambigu.

Literal Oktal Kini Lebih Aman

Literal oktal (angka berbasis 8) biasanya diawali dengan nol 0 seperti 010 untuk 8 dalam desimal. Namun ini sering membingungkan dan mudah salah diinterpretasikan sebagai angka desimal biasa terutama bagi developer baru.

javascript
// Mode non strict
console.log(010); // Output: 8 (di beberapa browser atau lingkungan lama)
// Di lingkungan modern dan Strict Mode ini sudah dianggap error atau dihilangkan

Strict Mode melarang literal oktal gaya lama yang diawali dengan nol. Untuk angka oktal yang benar kita harus menggunakan notasi 0o diikuti angka oktal. Ini menghindari ambiguitas dan mendorong penggunaan notasi yang lebih modern dan jelas.

Penanganan Kata Kunci this yang Lebih Jelas

Dalam mode non strict nilai this di dalam fungsi yang dipanggil secara langsung (bukan sebagai metode objek) akan secara otomatis mengacu ke objek global (window di browser atau global di Node js). Ini seringkali menjadi sumber kebingungan dan bug.

javascript
// Mode non strict
function showThisNonStrict() {
  console.log(this); // Output: Window (di browser) atau Global (di Node.js)
}
showThisNonStrict();

Dalam Strict Mode nilai this di dalam fungsi yang dipanggil tanpa objek konteks akan menjadi undefined. Ini memaksa kita untuk secara eksplisit menentukan konteks this atau menggunakan fungsi panah (arrow function) yang memiliki perilaku this yang leksikal sehingga lebih mudah diprediksi.

Pembatasan Penggunaan eval yang Lebih Ketat

Fungsi eval() yang bisa menjalankan string sebagai kode JavaScript seringkali dianggap berbahaya karena alasan keamanan dan performa. Strict Mode memberlakukan pembatasan yang lebih ketat pada eval().

javascript
// Mode strict
function evalStrict() {
  "use strict";
  var x = 10;
  eval("var x = 20;"); // Variabel x di dalam eval tidak akan menimpa x di luar eval
  console.log(x); // Output: 10
}
evalStrict();

Dalam Strict Mode variabel atau fungsi yang dideklarasikan di dalam eval() tidak akan mempengaruhi lingkungan sekitarnya. Ini mengurangi potensi kebocoran variabel dan perilaku yang tidak terduga saat menggunakan eval().

Kata Kunci with Akhirnya Pensiun Dini

Pernyataan with yang memungkinkan kita mengatur cakupan default untuk blok kode tertentu juga merupakan fitur yang sering menyebabkan kebingungan dan masalah performa.

javascript
// Mode non strict
var objWith = { a: 1, b: 2 };
with (objWith) {
  console.log(a); // Output: 1
}

Strict Mode sepenuhnya melarang penggunaan pernyataan with dengan melemparkan SyntaxError. Ini mendorong kita untuk menulis kode yang lebih jelas dan eksplisit mengenai akses properti objek.

Manfaat Kita Menggunakan Strict Mode Kode Lebih Bersih dan Profesional

Setelah melihat berbagai batasan yang diberikan Strict Mode mungkin kita bertanya kenapa harus pakai ini kalau banyak yang dilarang? Justru di situlah letak kekuatannya. Strict Mode memberikan banyak manfaat yang akan membuat kita menjadi developer yang lebih baik dan kode kita lebih berkualitas.

Deteksi Error Lebih Awal Hemat Waktu Debugging

Ini adalah manfaat paling langsung. Dengan Strict Mode banyak kesalahan umum yang di mode non strict akan "silent" dan sulit ditemukan kini akan langsung dilemparkan sebagai error. Ini berarti kita akan tahu ada yang salah saat compile time atau saat pertama kali kode dijalankan bukan setelah berjam jam mencari bug. Hemat waktu banget kan untuk debugging! Kita bisa langsung memperbaiki masalahnya sebelum semakin besar.

Membuat Kode Lebih Aman dan Kuat

Strict Mode menghilangkan banyak "bad parts" JavaScript. Ini termasuk fitur fitur yang rancu tidak konsisten atau berpotensi menyebabkan bug yang tidak terduga. Dengan menghapus fitur fitur ini Strict Mode membantu kita menulis kode yang lebih kokoh dan tidak rentan terhadap kesalahan. Ini seperti membangun rumah dengan fondasi yang kuat dari awal.

Persiapan Masa Depan untuk JavaScript Selanjutnya

JavaScript terus berkembang. Banyak fitur baru dan sintaks modern dirancang dengan mempertimbangkan perilaku Strict Mode. Dengan membiasakan diri menulis dalam Strict Mode kita secara tidak langsung juga mempersiapkan diri untuk masa depan JavaScript. Banyak fitur ES6 atau yang lebih baru seperti modul ES6 secara otomatis berjalan dalam Strict Mode. Jadi dengan menggunakannya sekarang kita sudah selangkah di depan.

Peningkatan Kinerja yang Kadang Tak Terduga

Meskipun bukan tujuan utamanya Strict Mode juga bisa berkontribusi pada peningkatan kinerja. Dengan menghilangkan beberapa ambiguitas dan perilaku yang tidak terprediksi mesin JavaScript bisa melakukan optimasi kode dengan lebih efektif. Ini karena mesin tidak perlu lagi mengelola berbagai kasus khusus atau perilaku yang tidak jelas sehingga bisa menjalankan kode kita lebih cepat.

Tips dan Trik Menggunakan Strict Mode untuk Kita Para Developer

Menggunakan Strict Mode itu gampang tapi ada beberapa tips yang bisa bikin pengalaman kita lebih asik dan lancar.

Selalu Aktifkan Strict Mode dalam Proyek Baru

Ini adalah rekomendasi terbaik. Setiap kali kita memulai proyek JavaScript baru pastikan untuk menambahkan use strict di bagian paling atas setiap file JavaScript. Dengan begitu kita akan langsung terbiasa menulis kode yang bersih dan menghindari jebakan sejak awal. Ini juga akan memastikan konsistensi di seluruh basis kode kita.

Hati Hati Saat Mengintegrasikan Kode Lama

Jika kita bekerja dengan proyek lama yang tidak ditulis dengan Strict Mode berhati hatilah saat mengaktifkannya. Mengaktifkan use strict secara global pada kode lama yang tidak dirancang untuk itu bisa menyebabkan banyak error baru bermunculan. Dalam kasus ini lebih baik menerapkan Strict Mode secara bertahap misalnya fungsi per fungsi atau modul per modul.

Pahami Batasan dan Perilaku Barunya

Jangan cuma asal pakai. Luangkan waktu untuk memahami secara spesifik apa saja yang dilarang atau diubah oleh Strict Mode. Memahami perbedaan perilaku ini akan membantu kita menulis kode yang benar dan menghindari frustrasi saat Strict Mode melemparkan error yang tidak kita duga. Pengetahuan ini adalah senjata kita untuk jadi developer yang lebih kompeten.

Penutup Yuk Jadikan Strict Mode Sahabat Koding Kita!

Nah itu dia penjelasan panjang lebar tentang Strict Mode di JavaScript. Kita sudah lihat bagaimana ia bekerja apa saja yang dicegahnya dan manfaat luar biasa yang diberikannya. Dari deteksi error lebih awal hingga kode yang lebih aman dan siap masa depan Strict Mode adalah alat yang wajib kita gunakan sebagai developer modern.

Mungkin awalnya terasa sedikit membatasi tapi percaya deh begitu kita terbiasa Strict Mode akan terasa seperti memiliki sepasang mata tambahan yang selalu menjaga kualitas kode kita. Ia akan membimbing kita menuju praktik terbaik dan membantu kita menghindari bug bug membandel yang bikin sakit kepala. Jadi mulai sekarang jangan ragu untuk menambahkan use strict di setiap kode JavaScript kita. Jadikan Strict Mode sahabat koding kita dan saksikan bagaimana kode kita menjadi lebih rapi lebih kuat dan pastinya lebih asik untuk dikembangkan. Selamat mencoba dan terus semangat ngodingnya ya!