"use strict"; Mendefinisikan bahwa kode JavaScript harus dieksekusi dalam mode "ketat".
The "use strict" Petunjuk
The "use strict" direktif baru dalam JavaScript 1.8.5 (ECMAScript version 5) .
Ini bukan pernyataan, tapi ekspresi literal, diabaikan oleh versi sebelumnya dari JavaScript.
Tujuan dari "use strict" adalah untuk menunjukkan bahwa kode harus dijalankan dalam mode "ketat".
Dengan modus yang ketat, Anda tidak bisa, misalnya, menggunakan variabel dideklarasikan.
mode ketat didukung di:
IE dari versi 10. Firefox dari versi 4.
Chrome dari versi 13. Safari dari versi 5.1.
Opera dari versi 12.
Mendeklarasikan Strict Mode
Mode ketat dinyatakan dengan menambahkan "use strict"; ke awal script atau fungsi.
Menyatakan pada awal naskah, ia memiliki lingkup global (semua kode di script akan mengeksekusi dalam mode ketat):
Contoh
"use strict";
myFunction();
function myFunction() {
y = 3.14;
// This will also cause an error (y is not defined)
}
Cobalah sendiri " Dideklarasikan di dalam fungsi, ia memiliki lingkup lokal (hanya kode dalam fungsi dalam modus ketat):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14;
// This will cause an error (y is not defined)
}
Cobalah sendiri " The "use strict"; Syntax
sintaks, untuk menyatakan modus yang ketat, dirancang agar kompatibel dengan versi JavaScript.
Kompilasi literal numerik (4 + 5;) atau string literal ("John Doe";) dalam program JavaScript tidak memiliki efek samping. Ini hanya mengkompilasi ke variabel non ada dan meninggal.
Jadi "use strict" ; hanya penting untuk compiler baru yang "mengerti" makna itu.
Mengapa Strict Mode?
mode ketat membuatnya lebih mudah untuk menulis "mengamankan" JavaScript.
Perubahan modus ketat sebelumnya diterima "sintaks yang buruk" ke dalam kesalahan yang nyata.
Sebagai contoh, di yang normal JavaScript, salah ketik nama variabel menciptakan variabel global yang baru. Dalam modus yang ketat, ini akan melemparkan kesalahan, sehingga mustahil untuk sengaja menciptakan variabel global.
Pada yang normal JavaScript, pengembang tidak akan menerima umpan balik kesalahan menempatkan nilai ke properti non-ditulis.
Dalam modus yang ketat, setiap tugas untuk properti non-ditulis, properti pengambil-satunya, yang tidak ada properti, variabel yang tidak ada, atau benda yang tidak ada, akan melempar kesalahan.
Tidak Diizinkan dalam Mode Strict
Menggunakan variabel, tanpa menyatakan itu, tidak diperbolehkan:
"use strict";
x = 3.14; // This
will cause an error (x is not defined)
Objek adalah variabel juga.
Menggunakan sebuah objek, tanpa menyatakan itu, tidak diperbolehkan:
"use strict";
x =
{p1:10, p2:20}; // This
will cause an error (x is not defined)
Menghapus variabel (atau objek) tidak diperbolehkan.
"use strict";
var 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
Duplikasi nama parameter tidak diperbolehkan:
"use strict";
function x(p1, p1) {}; // This will cause an error
Oktal literal numerik tidak diperbolehkan:
"use strict";
var x = 010; // This
will cause an error
Melarikan diri karakter tidak diperbolehkan:
"use strict";
var x = \010; // This will cause an error
Menulis untuk properti read-only tidak diperbolehkan:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Menulis untuk properti get-satunya tidak diperbolehkan:
"use strict";
var obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Menghapus properti undeletable tidak diperbolehkan:
"use strict";
delete Object.prototype; // This will cause an error
String "eval" tidak dapat digunakan sebagai variabel:
"use strict";
var eval = 3.14; // This will cause an error
String "argumen" tidak dapat digunakan sebagai variabel:
"use strict";
var arguments = 3.14; // This will cause an error
Dengan pernyataan tidak diperbolehkan:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Untuk alasan keamanan, eval() tidak diperbolehkan untuk membuat variabel dalam lingkup yang itu disebut:
"use strict";
eval ("var x = 2");
alert (x); // This
will cause an error
Dalam fungsi panggilan seperti f() , nilai ini adalah obyek global. Dalam mode ketat, sekarang terdefinisi.
Bukti masa depan!
kata kunci milik masa depan tidak diperbolehkan dalam mode yang ketat. Ini adalah:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // This will cause an error
Awas!
Awas!
The "use strict" direktif hanya diakui di awal script atau fungsi.