Penggunaan JavaScript Ketat
"use strict";
Mendefinisikan bahwa kode JavaScript harus dijalankan dalam "mode ketat".
Arahan "gunakan ketat"
Arahan "use strict"
baru di ECMAScript versi 5.
Ini bukan pernyataan, tetapi ekspresi literal, diabaikan oleh versi JavaScript sebelumnya.
Tujuannya "use strict"
adalah untuk menunjukkan bahwa kode harus dijalankan dalam "mode ketat".
Dengan mode ketat, Anda tidak dapat, misalnya, menggunakan variabel yang tidak dideklarasikan.
Semua browser modern mendukung "gunakan ketat" kecuali Internet Explorer 9 dan yang lebih rendah:
Directive | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
Angka-angka dalam tabel menentukan versi browser pertama yang sepenuhnya mendukung direktif.
Anda dapat menggunakan mode ketat di semua program Anda. Ini membantu Anda menulis kode yang lebih bersih, seperti mencegah Anda menggunakan variabel yang tidak dideklarasikan.
"use strict"
hanyalah sebuah string, jadi IE 9 tidak akan membuat kesalahan meskipun tidak memahaminya.
Mendeklarasikan Mode Ketat
Mode ketat dideklarasikan dengan menambahkan "gunakan ketat"; ke awal skrip atau fungsi.
Dideklarasikan di awal skrip, ia memiliki cakupan global (semua kode dalam skrip akan dijalankan dalam mode ketat):
Contoh
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Contoh
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Dideklarasikan di dalam suatu fungsi, ia memiliki cakupan lokal (hanya kode di dalam fungsi yang berada dalam mode ketat):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
"Gunakan ketat"; Sintaksis
Sintaksnya, untuk mendeklarasikan mode ketat, dirancang agar kompatibel dengan versi JavaScript yang lebih lama.
Mengkompilasi literal numerik (4 + 5;) atau string literal ("John Doe";) dalam program JavaScript tidak memiliki efek samping. Itu hanya mengkompilasi ke variabel yang tidak ada dan mati.
Jadi "use strict";
hanya penting bagi kompiler baru yang "memahami" artinya.
Mengapa Mode Ketat?
Mode ketat memudahkan penulisan JavaScript "aman".
Mode ketat mengubah "sintaks buruk" yang diterima sebelumnya menjadi kesalahan nyata.
Sebagai contoh, dalam JavaScript normal, salah ketik nama variabel akan membuat variabel global baru. Dalam mode ketat, ini akan menimbulkan kesalahan, sehingga tidak mungkin membuat variabel global secara tidak sengaja.
Dalam JavaScript normal, pengembang tidak akan menerima umpan balik kesalahan yang menetapkan nilai ke properti yang tidak dapat ditulis.
Dalam mode ketat, setiap penugasan ke properti yang tidak dapat ditulis, properti getter-only, properti yang tidak ada, variabel yang tidak ada, atau objek yang tidak ada, akan menimbulkan kesalahan.
Tidak Diizinkan dalam Mode Ketat
Menggunakan variabel, tanpa mendeklarasikannya, tidak diperbolehkan:
"use strict";
x = 3.14; // This will cause an error
Objek juga variabel.
Menggunakan objek, tanpa mendeklarasikannya, tidak diperbolehkan:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
Menghapus variabel (atau objek) tidak diperbolehkan.
"use strict";
let x = 3.14;
delete x; // This
will cause an error
Menghapus fungsi tidak diperbolehkan.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Menduplikasi nama parameter tidak diperbolehkan:
"use strict";
function x(p1, p1) {}; // This will cause an error
Literal numerik oktal tidak diperbolehkan:
"use strict";
let x = 010; // This
will cause an error
Karakter escape oktal tidak diperbolehkan:
"use strict";
let x = "\010"; // This will cause an error
Menulis ke properti hanya-baca tidak diperbolehkan:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Menulis ke properti get-only tidak diperbolehkan:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Menghapus properti yang tidak dapat dihapus tidak diperbolehkan:
"use strict";
delete Object.prototype; // This will cause an error
Kata eval
tidak dapat digunakan sebagai variabel:
"use strict";
let eval = 3.14; // This will cause an error
Kata arguments
tidak dapat digunakan sebagai variabel:
"use strict";
let arguments = 3.14; // This will cause an error
Pernyataan with
tidak diperbolehkan:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Untuk alasan keamanan, eval()
tidak diperbolehkan membuat variabel dalam lingkup dari mana ia dipanggil:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
Kata this
kunci dalam fungsi berperilaku berbeda dalam mode ketat.
Kata this
kunci mengacu pada objek yang disebut fungsi.
Jika objek tidak ditentukan, fungsi dalam mode ketat akan kembali undefined
dan fungsi dalam mode normal akan mengembalikan objek global (jendela):
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
Bukti masa depan!
Kata kunci yang dicadangkan untuk versi JavaScript mendatang TIDAK dapat digunakan sebagai nama variabel dalam mode ketat.
Ini adalah:
- mengimplementasikan
- antarmuka
- membiarkan
- kemasan
- pribadi
- terlindung
- publik
- statis
- menghasilkan
"use strict";
let public = 1500; // This will cause an error
Awas!
Arahan "gunakan ketat" hanya dikenali di awal skrip atau fungsi.