Baru-baru ini, saya menjalankan beberapa kode JavaScript saya melalui Crockford's JSLint , dan memberikan kesalahan berikut:
Masalah pada baris 1 karakter 1: Tidak ada pernyataan "gunakan ketat".
Melakukan pencarian, saya menyadari bahwa beberapa orang menambahkan "use strict";
ke dalam kode JavaScript mereka. Setelah saya menambahkan pernyataan, kesalahan berhenti muncul. Sayangnya, Google tidak mengungkapkan banyak sejarah di balik pernyataan string ini. Tentu saja itu ada hubungannya dengan bagaimana JavaScript ditafsirkan oleh browser, tapi saya tidak tahu apa efeknya.
Jadi ada apa "use strict";
, apa implikasinya, dan apakah itu masih relevan?
Apakah ada dari browser saat ini menanggapi "use strict";
string atau apakah untuk digunakan di masa depan?
sumber
"use strict";
sendiri tidak membuat JS dicakup secara leksikal. Mendeklarasikan variabel denganlet
danconst
harus digunakan juga.Jawaban:
Artikel ini tentang Mode Ketat Javascript mungkin menarik bagi Anda: John Resig - ECMAScript 5 Strict Mode, JSON, dan Lainnya
Mengutip beberapa bagian menarik:
Dan:
Perhatikan juga Anda dapat menerapkan "mode ketat" ke seluruh file ... Atau Anda dapat menggunakannya hanya untuk fungsi tertentu (masih mengutip dari artikel John Resig) :
Yang mungkin bisa membantu jika Anda harus mencampur kode lama dan baru ;-)
Jadi, saya kira itu agak seperti yang
"use strict"
dapat Anda gunakan di Perl (karena itu namanya?) : Ini membantu Anda membuat lebih sedikit kesalahan, dengan mendeteksi lebih banyak hal yang dapat menyebabkan kerusakan.Mode ketat sekarang didukung oleh semua browser utama .
Di dalam modul ECMAScript asli (dengan
import
danexport
pernyataan) dan kelas ES6 , mode ketat selalu diaktifkan dan tidak dapat dinonaktifkan.sumber
"use strict"
di Firefox 3.6, Safari 5, Chrome 7 dan Opera 10.6 (semua Mac). Tidak ada kesalahan apa pun, jadi saya rasa 'gunakan ketat' belum didukung di browser apa pun. Tidak menguji di IE9;)Ini adalah fitur baru dari ECMAScript 5. John Resig menulis ringkasan yang bagus tentang itu.
Ini hanya string yang Anda masukkan ke file JavaScript (baik di bagian atas file Anda atau di dalam suatu fungsi) yang terlihat seperti ini:
Menempatkannya dalam kode Anda sekarang seharusnya tidak menyebabkan masalah dengan browser saat ini karena itu hanya string. Ini dapat menyebabkan masalah dengan kode Anda di masa mendatang jika kode Anda melanggar pragma. Misalnya, jika saat ini Anda memiliki
foo = "bar"
tanpa mendefinisikanfoo
terlebih dahulu, kode Anda akan mulai gagal ... yang merupakan hal yang baik menurut saya.sumber
<script>"use strict";
. Bendera hanya berlaku untuk blok yang disertakan.'use strict';
saja"use strict";
, itu akan gagal sebagai gantinya. Ini lebih masuk akal, karena jika menambahkannya ke objek global itu berarti bahwa itu mungkin tidak berfungsi saat Anda menjalankan fungsi / melakukan sesuatu yang lain yang me-reset blok, karena akan berada di blok tertinggi (global).Pernyataan itu
"use strict";
menginstruksikan browser untuk menggunakan mode Strict, yang merupakan set fitur yang diperkecil dan lebih aman dari JavaScript.Daftar fitur (tidak lengkap)
Melarang variabel global. (Menangkap
var
deklarasi dan kesalahan ketik yang hilang dalam nama variabel)Tugas gagal yang gagal akan membuat kesalahan dalam mode ketat (menetapkan
NaN = 5;
)Upaya untuk menghapus properti yang tidak dapat dihapus akan melempar (
delete Object.prototype
)Membutuhkan semua nama properti dalam literal objek menjadi unik (
var x = {x1: "1", x1: "2"}
)Nama parameter fungsi harus unik (
function sum (x, x) {...}
)Melarang sintaks oktal (
var x = 023;
beberapa devs berasumsi salah bahwa nol sebelumnya tidak mengubah angka.)Melarang
with
kata kuncieval
dalam mode ketat tidak memperkenalkan variabel baruMelarang menghapus nama biasa (
delete x;
)Melarang pengikatan atau penugasan nama
eval
danarguments
dalam bentuk apa punMode ketat tidak alias properti
arguments
objek dengan parameter formal. (Yaitu dalamfunction sum (a,b) { return arguments[0] + b;}
Ini bekerja karenaarguments[0]
terikata
dan sebagainya.)arguments.callee
tidak didukung[Ref: Mode Ketat , Jaringan Pengembang Mozilla ]
sumber
window.foo = bar
).Jika orang khawatir tentang penggunaannya
use strict
, mungkin ada baiknya memeriksa artikel ini:Dukungan ECMAScript 5 'Mode ketat' di browser. Apa artinya ini?
NovoGeek.com - weblog Krishna
Ini berbicara tentang dukungan browser, tetapi yang lebih penting bagaimana menghadapinya dengan aman:
sumber
window
this
itu Anda tidak dapat target denganwindow
?this
milik fungsinya sendiri dan bukan jendela globalthis
sebenarnyaundefined
.Satu kata peringatan, semua yang Anda isi ulang oleh pemrogram: menerapkan
"use strict"
kode yang ada bisa berbahaya! Benda ini bukan stiker yang membuat Anda merasa lebih baik dan bahagia, sehingga Anda bisa menampar kode itu untuk membuatnya lebih baik. Dengan"use strict"
pragma, browser akan tiba-tiba MELALUI pengecualian di tempat-tempat acak yang tidak pernah dilontarkan sebelumnya hanya karena di tempat itu Anda melakukan sesuatu yang JavaScript default / longgar dengan senang hati mengizinkan tetapi membenci JavaScript yang ketat! Anda mungkin memiliki pelanggaran ketat bersembunyi di panggilan yang jarang digunakan dalam kode Anda yang hanya akan melemparkan pengecualian ketika mereka akhirnya dijalankan - katakanlah, dalam lingkungan produksi yang digunakan pelanggan membayar Anda!Jika Anda ingin mengambil risiko, itu adalah ide yang baik untuk diterapkan
"use strict"
bersamaan dengan tes unit komprehensif dan tugas pembangunan JSHint yang dikonfigurasi secara ketat yang akan memberi Anda keyakinan bahwa tidak ada sudut gelap modul Anda yang akan meledak mengerikan hanya karena Anda Sudah menyalakan Mode Ketat. Atau, hei, ini opsi lain: jangan tambahkan"use strict"
kode warisan Anda, mungkin lebih aman, jujur. PASTI JANGAN menambah"use strict"
modul yang tidak Anda miliki atau pertahankan, seperti modul pihak ketiga.Saya pikir meskipun itu adalah binatang sangkar yang mematikan,
"use strict"
bisa menjadi hal yang baik, tetapi Anda harus melakukannya dengan benar. Waktu terbaik untuk bertindak ketat adalah ketika proyek Anda adalah greenfield dan Anda mulai dari awal. KonfigurasikanJSHint/JSLint
dengan semua peringatan dan opsi yang dipasang sekencang yang dapat diterima tim Anda, dapatkan kecocokan sistem build / test / assert du jour sepertiGrunt+Karma+Chai
, dan hanya MAKA mulai menandai semua modul baru Anda sebagai"use strict"
. Bersiaplah untuk menyembuhkan banyak kesalahan dan peringatan yang picik. Pastikan semua orang memahami gravitasi dengan mengkonfigurasi bangunan ke FAIL jikaJSHint/JSLint
menghasilkan pelanggaran.Proyek saya bukan proyek greenfield ketika saya mengadopsi
"use strict"
. Akibatnya, IDE saya penuh dengan tanda merah karena saya tidak memiliki"use strict"
setengah modul saya, dan JSHint mengeluh tentang itu. Ini mengingatkan saya tentang apa yang harus saya lakukan di masa depan. Tujuan saya adalah menjadi tanda merah gratis karena semua"use strict"
pernyataan saya yang hilang , tetapi itu masih bertahun-tahun lagi.sumber
"use strict";
kode yang ada. Yang sedang berkata, saya akan hampir selalu menggunakannya ketika saya sedang menulis kode baru dari awalMenggunakannya
'use strict';
tidak tiba-tiba membuat kode Anda lebih baik.The JavaScript modus ketat adalah fitur di ECMAScript 5 . Anda dapat mengaktifkan mode ketat dengan mendeklarasikan ini di bagian atas skrip / fungsi Anda.
Ketika mesin JavaScript melihat arahan ini , itu akan mulai menafsirkan kode dalam mode khusus. Dalam mode ini, kesalahan dilontarkan ketika praktik pengkodean tertentu yang akhirnya berpotensi menjadi bug terdeteksi (yang merupakan alasan di balik mode ketat).
Pertimbangkan contoh ini:
Dalam obsesi mereka untuk berbaris literal numerik, pengembang secara tidak sengaja menginisialisasi variabel
b
dengan literal oktal. Mode non-ketat akan menafsirkan ini sebagai numerik literal dengan nilai24
(dalam basis 10). Namun, mode ketat akan menimbulkan kesalahan.Untuk daftar spesialisasi yang tidak lengkap dalam mode ketat, lihat jawaban ini .
Di mana saya harus menggunakan
'use strict';
?Di aplikasi JavaScript saya yang baru : Tentu saja! Mode ketat dapat digunakan sebagai pelapor ketika Anda melakukan sesuatu yang bodoh dengan kode Anda.
Dalam kode JavaScript saya yang ada : Mungkin tidak! Jika kode JavaScript Anda saat ini memiliki pernyataan yang dilarang dalam mode ketat, aplikasi hanya akan rusak. Jika Anda menginginkan mode ketat, Anda harus siap untuk debug dan memperbaiki kode Anda yang ada. Inilah sebabnya mengapa menggunakan
'use strict';
tidak tiba-tiba membuat kode Anda lebih baik .Bagaimana cara menggunakan mode ketat?
Masukkan
'use strict';
pernyataan di atas skrip Anda:Perhatikan bahwa semua yang ada di file
myscript.js
akan ditafsirkan dalam mode ketat.Atau, masukkan
'use strict';
pernyataan di atas badan fungsi Anda:Segala sesuatu dalam lingkup fungsi leksikal
doSomething
akan ditafsirkan dalam mode ketat. Kata lingkup leksikal penting di sini. Misalnya, jika kode ketat Anda memanggil fungsi pustaka yang tidak ketat , hanya kode Anda yang dijalankan dalam mode ketat, dan bukan fungsi yang dipanggil. Lihat jawaban ini untuk penjelasan yang lebih baik.Hal-hal apa yang dilarang dalam mode ketat?
Saya menemukan artikel bagus yang menggambarkan beberapa hal yang dilarang dalam mode ketat (perhatikan bahwa ini bukan daftar eksklusif):
Kata-kata yang dicadangkan untuk versi JavaScript yang akan datang
ECMAScript 5 menambahkan daftar kata-kata yang dipesan. Jika Anda menggunakannya sebagai variabel atau argumen, mode ketat akan menimbulkan kesalahan. Kata-kata yang dicadangkan adalah:
Bacaan lebih lanjut
sumber
'use strict'
arahan, mereka akan dieksekusi dalam mode non-ketat, bahkan ketika dipanggil dari fungsi yang berjalan dalam mode ketat. Lihat asnwer ini untuk penjelasan.this
). Sekarang saya melihat Anda merujuk ke memanggil fungsi lain.Saya sangat menyarankan setiap pengembang untuk mulai menggunakan mode ketat sekarang. Ada cukup banyak browser yang mendukungnya sehingga mode ketat secara sah akan membantu menyelamatkan kami dari kesalahan yang bahkan tidak kami ketahui ada dalam kode Anda.
Ternyata, pada tahap awal akan ada kesalahan yang belum pernah kami temui sebelumnya. Untuk mendapatkan manfaat penuh, kita perlu melakukan pengujian yang tepat setelah beralih ke mode ketat untuk memastikan kita telah menangkap semuanya. Jelas kami tidak hanya membuang
use strict
kode kami dan menganggap tidak ada kesalahan. Jadi churnnya adalah saatnya untuk mulai menggunakan fitur bahasa yang sangat berguna ini untuk menulis kode yang lebih baik.Sebagai contoh,
JSLint adalah debugger yang ditulis oleh Douglas Crockford. Cukup tempel di skrip Anda, dan itu akan dengan cepat memindai segala masalah dan kesalahan yang terlihat dalam kode Anda.
sumber
Saya ingin menawarkan jawaban yang agak lebih mapan melengkapi jawaban yang lain. Saya berharap untuk mengedit jawaban paling populer, tetapi gagal. Saya mencoba membuatnya selengkap dan selengkap mungkin.
Anda dapat merujuk ke dokumentasi MDN untuk informasi lebih lanjut.
"use strict"
arahan yang diperkenalkan dalam ECMAScript 5.Arahan mirip dengan pernyataan, namun berbeda.
use strict
tidak mengandung kata-kata kunci: Arahan adalah pernyataan ekspresi sederhana, yang terdiri dari string literal khusus (dalam tanda kutip tunggal atau ganda). Mesin JavaScript, yang tidak menerapkan ECMAScript 5, hanya melihat pernyataan ekspresi tanpa efek samping. Diharapkan bahwa versi mendatang dari standar ECMAScript memperkenalkanuse
sebagai kata kunci nyata; kutipan dengan demikian akan menjadi usang.use strict
dapat digunakan hanya pada awal naskah atau fungsi, yaitu harus mendahului setiap pernyataan (nyata) lainnya. Itu tidak harus menjadi instruksi pertama dalam skrip fungsi: itu dapat didahului oleh pernyataan pernyataan lain yang terdiri dari string literal (dan implementasi JavaScript dapat memperlakukannya sebagai arahan khusus implementasi). Pernyataan literal string, yang mengikuti pernyataan nyata pertama (dalam skrip atau fungsi) adalah pernyataan ekspresi sederhana. Penerjemah tidak boleh menafsirkannya sebagai arahan dan mereka tidak memiliki efek.The
use strict
direktif menunjukkan bahwa kode berikut (dalam naskah atau fungsi) adalah kode yang ketat. Kode di tingkat tertinggi skrip (kode yang tidak berfungsi) dianggap kode ketat ketika skrip berisiuse strict
arahan. Konten dari suatu fungsi dianggap kode ketat ketika fungsi itu sendiri didefinisikan dalam kode ketat atau ketika fungsi tersebut mengandunguse strict
arahan. Kode yang diteruskan ke suatueval()
metode dianggap kode ketat ketikaeval()
dipanggil dari kode ketat atau mengandunguse strict
arahan itu sendiri.Mode ketat ECMAScript 5 adalah subset terbatas dari bahasa JavaScript, yang menghilangkan defisit bahasa yang relevan dan menampilkan pengecekan kesalahan yang lebih ketat dan keamanan yang lebih tinggi. Berikut ini daftar perbedaan antara mode ketat dan mode normal (di mana tiga yang pertama sangat penting):
with
pernyataan-dalam mode ketat.Object
, maka Anda akan mendapatkanReferenceError
. Dalam mode normal, pengidentifikasi secara implisit dinyatakan sebagai variabel global (sebagai properti globalObject
)this
memiliki nilaiundefined
dalam fungsi yang dipanggil sebagai fungsi (bukan sebagai metode). (Dalam mode normalthis
selalu menunjuk ke globalObject
). Perbedaan ini dapat digunakan untuk menguji apakah suatu implementasi mendukung mode ketat:Juga ketika suatu fungsi dipanggil dengan
call()
atauapply
dalam mode ketat, makathis
tepat nilai argumen pertama daricall()
atauapply()
doa. (Dalam mode normalnull
danundefined
digantikan oleh globalObject
dan nilai-nilai, yang bukan objek, dilemparkan ke objek.)Dalam mode ketat Anda akan mendapatkan
TypeError
, ketika Anda mencoba menetapkan untuk properti hanya baca atau untuk mendefinisikan properti baru untuk objek yang tidak dapat diperluas. (Dalam mode normal keduanya gagal tanpa pesan kesalahan.)eval()
, Anda tidak dapat mendeklarasikan atau mendefinisikan variabel atau fungsi dalam ruang lingkup pemanggil (seperti yang dapat Anda lakukan dalam mode normal). Sebagai gantinya, ruang lingkup baru dibuat untukeval()
dan variabel dan fungsi berada dalam ruang lingkup itu. Lingkup itu hancur setelaheval()
eksekusi selesai.SyntaxError
ketikadelete
operator diikuti oleh pengidentifikasi yang tidak memenuhi syarat (variabel, fungsi atau parameter fungsi). Dalam mode normal,delete
ekspresi tidak akan melakukan apa pun dan dievaluasifalse
.TypeError
ketika Anda mencoba untuk menghapus properti yang tidak dapat dikonfigurasi. (Dalam mode normal, upaya tersebut gagal dandelete
ekspresi dievaluasi menjadifalse
).0x
. (Dalam mode normal beberapa implementasi memang memungkinkan literal oktal.)eval
danarguments
diperlakukan seperti kata kunci. Anda tidak dapat mengubah nilainya, tidak dapat memberikan nilainya, dan Anda tidak dapat menggunakannya sebagai nama untuk variabel, fungsi, parameter fungsi, atau pengidentifikasi blok tangkap.arguments.caller
danarguments.callee
menyebabkan suatuTypeError
fungsi dalam mode ketat. Selain itu, beberapa properti penelepon dan argumen fungsi dalam mode ketat menyebabkanTypeError
ketika Anda mencoba untuk membacanya.sumber
0
.Dua sen saya:
Salah satu tujuan dari mode ketat adalah untuk memungkinkan debugging masalah lebih cepat. Ini membantu pengembang dengan melemparkan pengecualian ketika terjadi kesalahan tertentu yang dapat menyebabkan perilaku diam & aneh laman web Anda. Saat kami menggunakan
use strict
, kode akan membuang kesalahan yang membantu pengembang untuk memperbaikinya terlebih dahulu.Beberapa hal penting yang saya pelajari setelah menggunakan
use strict
:Mencegah Deklarasi Variabel Global:
Sekarang, kode ini dibuat
nameoftree
dalam lingkup global yang dapat diakses menggunakanwindow.nameoftree
. Ketika kami menerapkanuse strict
kode akan membuang kesalahan.Sample
Hilangkan
with
pernyataan:with
pernyataan tidak dapat dikecilkan menggunakan alat seperti uglify-js . Mereka juga sudah tidak digunakan lagi dan dihapus dari versi JavaScript yang akan datang.Sample
Mencegah Duplikat:
Ketika kami memiliki properti duplikat, itu melempar pengecualian
Ada beberapa lagi tetapi saya perlu mendapatkan lebih banyak pengetahuan tentang itu.
sumber
Jika Anda menggunakan browser yang dirilis pada tahun lalu atau lebih maka kemungkinan besar mendukung mode JavaScript Strict. Hanya browser lama yang ada sebelum ECMAScript 5 menjadi standar saat ini yang tidak mendukungnya.
Kutipan di sekitar perintah memastikan bahwa kode juga akan tetap bekerja di browser lama (meskipun hal-hal yang menghasilkan kesalahan sintaks dalam mode ketat umumnya hanya akan menyebabkan skrip tidak berfungsi dalam beberapa cara yang sulit dideteksi di browser lama itu).
sumber
Saat menambahkan
"use strict";
, kasus-kasus berikut akan melempar SyntaxError sebelum skrip dijalankan:Membuka jalan untuk versi ECMAScript masa depan , menggunakan salah satu kata kunci yang baru disediakan (di ramalan untuk ECMAScript 6 ):
implements
,interface
,let
,package
,private
,protected
,public
,static
, danyield
.Mendeklarasikan fungsi dalam blok
Sintaks oktal
this
arahkan ke objek global.Mendeklarasikan dua kali nama yang sama untuk nama properti dalam objek literal
Ini bukan lagi kasus di ECMAScript 6 ( bug 1041128 ).
Mendeklarasikan dua argumen fungsi dengan fungsi nama yang sama
Menetapkan nilai ke variabel yang tidak dideklarasikan
Menggunakan
delete
nama variabeldelete myVariable;
Menggunakan
eval
atauarguments
sebagai variabel atau nama argumen fungsiSumber:
Transisi ke mode ketat di MDN
Mode ketat pada MDN
Mode Ketat JavaScript dan Mengapa Anda Harus Menggunakannya di blog Colin J. Ihrig (versi arsip)
sumber
Mode ketat membuat beberapa perubahan pada semantik JavaScript normal:
menghilangkan beberapa kesalahan diam JavaScript dengan mengubahnya untuk membuang kesalahan.
memperbaiki kesalahan yang menyulitkan mesin JavaScript untuk melakukan optimasi.
melarang beberapa sintaks yang kemungkinan akan didefinisikan dalam versi ECMAScript berikutnya.
untuk informasi lebih lanjut, vistit Mode Ketat - Javascript
sumber
"Gunakan Ketat"; adalah asuransi yang programmer tidak akan menggunakan sifat longgar atau buruk dari JavaScript. Ini adalah panduan, sama seperti penggaris akan membantu Anda membuat garis lurus. "Gunakan Strict" akan membantu Anda melakukan "Straight coding".
Mereka yang memilih untuk tidak menggunakan penggaris untuk melakukan garis lurus biasanya berakhir di halaman tersebut meminta orang lain untuk men-debug kode mereka.
Percayalah padaku. Biaya overhead dapat diabaikan dibandingkan dengan kode yang dirancang dengan buruk. Doug Crockford, yang telah menjadi pengembang senior JavaScript selama beberapa tahun, memiliki posting yang sangat menarik di sini . Secara pribadi, saya suka kembali ke situsnya setiap saat untuk memastikan saya tidak melupakan praktik baik saya.
Praktik JavaScript modern harus selalu membangkitkan "Use Strict"; pragma. Satu-satunya alasan ECMA Group menjadikan mode "Strict" menjadi opsional adalah untuk mengizinkan akses coders yang kurang berpengalaman ke JavaScript dan kemudian memberi waktu untuk beradaptasi dengan praktik pengkodean yang baru dan lebih aman.
sumber
Termasuk
use strict
di awal semua file JavaScript sensitif Anda dari titik ini adalah cara kecil untuk menjadi programmer JavaScript yang lebih baik dan menghindari variabel acak menjadi global dan segala sesuatunya berubah secara diam-diam.sumber
Mengutip dari w3schools :
Silakan merujuk ke http://www.w3schools.com/js/js_strict.asp untuk tahu lebih banyak
sumber
"use strict"
membuat kode JavaScript untuk dijalankan dalam mode ketat , yang pada dasarnya berarti semuanya harus didefinisikan sebelum digunakan. Alasan utama untuk menggunakan mode ketat adalah untuk menghindari penggunaan global dari metode yang tidak ditentukan.Juga dalam mode ketat, segalanya berjalan lebih cepat, beberapa peringatan atau peringatan diam membuat kesalahan fatal, lebih baik untuk selalu menggunakannya untuk membuat kode yang lebih rapi.
"use strict"
secara luas diperlukan untuk digunakan dalam ECMA5, di ECMA6 itu adalah bagian dari JavaScript secara default , jadi tidak perlu ditambahkan jika Anda menggunakan ES6.Lihatlah pernyataan dan contoh ini dari MDN:
1) mode ketat dalam fungsi
2) mode ketat seluruh skrip
3) Penugasan untuk global yang tidak dapat ditulis
Anda dapat membaca lebih lanjut tentang MDN .
sumber
Ada pembicaraan yang baik oleh beberapa orang yang ada di komite ECMAScript: Perubahan pada JavaScript, Bagian 1: ECMAScript 5 " tentang bagaimana penambahan penggunaan
"use strict"
sakelar memungkinkan para pelaksana JavaScript untuk membersihkan banyak fitur berbahaya JavaScript tanpa tiba-tiba merusak setiap situs web Di dalam dunia.Tentu saja ini juga berbicara tentang betapa banyak kesalahan tersebut dan bagaimana ECMAScript 5 memperbaikinya.
sumber
Contoh kecil untuk dibandingkan:
Mode tidak ketat:
Mode yang ketat:
Mode tidak ketat:
sumber
this === 'a'
dalam kedua contoh?Catatan yang
use strict
diperkenalkan di EcmaScript 5 dan disimpan sejak saat itu.Di bawah ini adalah kondisi untuk memicu mode ketat di ES6 dan ES7 :
sumber
Alasan utama mengapa pengembang harus menggunakan
"use strict"
adalah:Mencegah deklarasi variabel global yang tidak disengaja . Menggunakan
"use strict()"
akan memastikan bahwa variabel dideklarasikan denganvar
sebelum digunakan. Misalnya:"use strict"
Arahan hanya dikenali pada awal skrip atau fungsi.String
"arguments"
tidak dapat digunakan sebagai variabel:Akan membatasi penggunaan kata kunci sebagai variabel. Mencoba menggunakannya akan menimbulkan kesalahan.
Singkatnya akan membuat kode Anda lebih sedikit rawan kesalahan dan pada gilirannya akan membuat Anda menulis kode yang baik.
Untuk membaca lebih lanjut tentang hal ini, Anda dapat merujuk di sini .
sumber
"gunakan ketat"; adalah upaya ECMA untuk membuat JavaScript sedikit lebih kuat. Ini membawa JS upaya untuk membuatnya setidaknya sedikit "ketat" (bahasa lain menerapkan aturan ketat sejak tahun 90-an). Ini sebenarnya "memaksa" pengembang JavaScript untuk mengikuti semacam praktik terbaik pengkodean. Namun, JavaScript masih sangat rapuh. Tidak ada variabel yang diketik, metode yang diketik, dll. Saya sangat menyarankan pengembang JavaScript untuk mempelajari bahasa yang lebih kuat seperti Java atau ActionScript3, dan menerapkan praktik terbaik yang sama dalam kode JavaScript Anda, itu akan bekerja lebih baik dan lebih mudah untuk debug.
sumber
Mode JavaScript "ketat" diperkenalkan di ECMAScript 5.
Menulis
"use strict";
di bagian paling atas dari file JS Anda mengaktifkan pemeriksaan sintaks yang ketat. Itu melakukan tugas-tugas berikut untuk kita:menunjukkan kesalahan jika Anda mencoba untuk menetapkan ke variabel yang tidak dideklarasikan
menghentikan Anda dari menimpa pustaka sistem kunci JS
melarang beberapa fitur bahasa yang tidak aman atau rentan kesalahan
use strict
juga berfungsi di dalam fungsi individu. Itu selalu merupakan praktik yang lebih baik untuk dimasukkanuse strict
dalam kode Anda.Masalah kompatibilitas browser: Arahan "use" dimaksudkan untuk kompatibel dengan mundur. Browser yang tidak mendukungnya hanya akan melihat string literal yang tidak dirujuk lebih lanjut. Jadi, mereka akan melewatinya dan melanjutkan.
sumber
use strict
adalah cara untuk membuat kode Anda lebih aman, karena Anda tidak dapat menggunakan fitur berbahaya yang dapat bekerja tidak seperti yang Anda harapkan. Dan, seperti yang ditulis sebelumnya, itu membuat kode lebih ketat.sumber
Use Strict digunakan untuk menampilkan kesalahan umum dan berulang sehingga ditangani secara berbeda, dan mengubah cara skrip java berjalan, perubahan tersebut adalah:
Mencegah global yang tidak disengaja
Tidak ada duplikat
Eliminasi dengan
Hilangkan paksaan ini
Eval aman ()
Kesalahan untuk kekal
Anda juga dapat membaca artikel ini untuk detailnya
sumber
Biasanya, JavaScript tidak mengikuti aturan ketat, sehingga meningkatkan kemungkinan kesalahan. Setelah menggunakan
"use strict"
, kode JavaScript harus mengikuti serangkaian aturan ketat seperti dalam bahasa pemrograman lain seperti penggunaan terminator, deklarasi sebelum inisialisasi, dll.Jika
"use strict"
digunakan, kode harus ditulis dengan mengikuti seperangkat aturan yang ketat, sehingga mengurangi kemungkinan kesalahan dan ambiguitas.sumber
"gunakan ketat"; Menentukan bahwa kode JavaScript harus dieksekusi dalam "mode ketat".
Semua browser modern mendukung "penggunaan yang ketat" kecuali Internet Explorer 9 dan yang lebih rendah .
Kerugian
Jika pengembang menggunakan pustaka yang berada dalam mode ketat, tetapi pengembang terbiasa bekerja dalam mode normal, mereka mungkin memanggil beberapa tindakan pada pustaka yang tidak akan berfungsi seperti yang diharapkan.
Lebih buruk lagi, karena pengembang berada dalam mode normal, mereka tidak memiliki kelebihan dari kesalahan tambahan yang dilemparkan, sehingga kesalahan tersebut bisa gagal secara diam-diam.
Juga, seperti yang tercantum di atas, mode ketat menghentikan Anda dari melakukan hal-hal tertentu.
Orang-orang pada umumnya berpikir bahwa Anda seharusnya tidak menggunakan hal-hal itu sejak awal, tetapi beberapa pengembang tidak suka kendala dan ingin menggunakan semua fitur bahasa.
Untuk contoh dasar dan untuk referensi melalui:
https://www.tutorialsteacher.com/javascript/javascript-strict
sumber
Mode yang ketat dapat mencegah kebocoran memori.
Silakan periksa fungsi di bawah ini yang ditulis dalam mode tidak ketat:
Dalam fungsi ini, kami menggunakan variabel yang disebut
name
di dalam fungsi. Secara internal, kompiler akan terlebih dahulu memeriksa apakah ada variabel yang dideklarasikan dengan nama tertentu dalam lingkup fungsi tertentu. Karena kompiler mengerti bahwa tidak ada variabel seperti itu, ia akan memeriksa dalam lingkup luar. Dalam kasus kami, ini adalah ruang lingkup global. Sekali lagi, kompiler mengerti bahwa juga tidak ada variabel yang dideklarasikan di ruang global dengan nama itu, sehingga ia membuat variabel seperti itu bagi kita di ruang global. Secara konseptual, variabel ini akan dibuat dalam lingkup global dan akan tersedia di seluruh aplikasi.Skenario lain adalah bahwa, katakanlah, variabel dideklarasikan dalam fungsi anak. Dalam kasus itu, kompilator memeriksa validitas variabel itu di lingkup luar, yaitu fungsi induk. Hanya kemudian akan memeriksa di ruang global dan membuat variabel untuk kita di sana. Itu berarti pemeriksaan tambahan perlu dilakukan. Ini akan mempengaruhi kinerja aplikasi.
Sekarang mari kita tulis fungsi yang sama dalam mode ketat.
Kami akan mendapatkan kesalahan berikut.
Di sini, kompiler melempar kesalahan referensi. Dalam mode ketat, kompiler tidak memungkinkan kita untuk menggunakan variabel tanpa mendeklarasikannya. Sehingga kebocoran memori bisa dicegah. Selain itu, kami dapat menulis kode yang lebih optimal.
sumber