Rumah  >  Artikel  >  hujung hadapan web  >  Pengenalan kepada ECMAScript 5 Mod Ketat_Pengetahuan Asas

Pengenalan kepada ECMAScript 5 Mod Ketat_Pengetahuan Asas

WBOY
WBOYasal
2016-05-16 16:11:421272semak imbas

Mod Ketat ialah ciri baharu ECMAScript 5, yang membolehkan anda meletakkan keseluruhan program, atau fungsi tertentu, dalam konteks pengendalian "ketat". Konteks ketat ini akan menghalang operasi tertentu dan membuang lebih banyak pengecualian.

Walaupun ECMAScript 5 serasi ke belakang dengan ECMAScript 3, dalam mod ketat semua ciri yang ditamatkan dalam ECMAScript 3 dilumpuhkan (atau ralat lempar) dan bukannya serasi.

Mendayakan mod ketat mempunyai faedah berikut:

1. Tangkap beberapa ralat pengaturcaraan dan buang pengecualian.
2. Cegah beberapa operasi yang agak "tidak selamat" (seperti mengakses pembolehubah global) dan buang pengecualian.
3. Lumpuhkan beberapa ciri yang mengelirukan.

Kebanyakan maklumat tentang mod ketat boleh didapati di halaman 223 Spesifikasi ES5 [PDF].

(Nota: Mod ketat ECMAScript 5 berbeza daripada mod ketat Firefox)

Cara mendayakan mod ketat

Tambah pernyataan ini pada permulaan program untuk mendayakan mod ketat untuk keseluruhan skrip:

Salin kod Kod adalah seperti berikut:

'gunakan ketat';

Anda juga boleh mendayakan mod ketat hanya di dalam fungsi, supaya ia tidak menjejaskan bahagian luar:
Salin kod Kod adalah seperti berikut:

fungsi imStrict() {
'gunakan ketat';
​ //...kod anda...
}

Pernyataan yang membolehkan mod ketat hanyalah rentetan biasa "gunakan ketat" tanpa sebarang sintaks baharu. Ini bermakna tiada kesan negatif pada pelayar lama.

Aplikasi praktikal untuk mendayakan mod ketat dalam fungsi adalah untuk menentukan keseluruhan perpustakaan kelas Javascript di dalam fungsi mod ketat, supaya ia tidak menjejaskan kod luaran:

Salin kod Kod adalah seperti berikut:

// Kod tidak ketat...

(fungsi(){
"gunakan ketat";

// Tentukan perpustakaan anda dengan ketat...
})();

// Kod tidak ketat...


Jadi, apakah perubahan kepada skrip dalam mod ketat?

Pembolehubah dan Sifat

Penugasan kepada pembolehubah yang tidak ditentukan akan gagal dan bukannya menjadikan pembolehubah itu sebagai pembolehubah global.

Menulis sifat dengan sifat boleh tulis palsu, memadamkan sifat dengan sifat palsu boleh dikonfigurasikan atau menambah sifat boleh diperluas dengan sifat palsu akan mengakibatkan ralat (sifat ini telah dipersetujui terlebih dahulu). Pada masa lalu, operasi ini tidak memberikan pengecualian dan hanya gagal secara senyap.

Melakukan operasi padam pada pembolehubah, fungsi atau parameter fungsi akan menyebabkan ralat.

Salin kod Kod adalah seperti berikut:

var foo = 'ujian';
ujian fungsi() { }

padam foo; // Ralat
padam ujian; // Ralat

ujian fungsi2(arg) {
padam arg; // Ralat
}


Menentukan sifat yang sama di dalam bekas objek akan menyebabkan pengecualian dilemparkan:
Salin kod Kod adalah seperti berikut:

//Ralat
{ foo: benar, foo: palsu }

eval

Sebarang penggunaan nama "eval" (niat utama adalah untuk menunjukkan fungsi eval kepada pembolehubah atau sifat objek) adalah dilarang.

Salin kod Kod adalah seperti berikut:

// Semua menjana ralat...
obj.eval = ...
obj.foo = eval;
var eval = ...;
untuk ( var eval dalam ... ) {}
fungsi eval(){}
ujian fungsi(eval){}
fungsi(eval){}
Fungsi baharu("eval")

Selain itu, mengisytiharkan pembolehubah baharu melalui eval juga tidak akan memberi kesan:
Salin kod Kod adalah seperti berikut:

eval("var a = false;");
print( typeof a ); // undefined

Fungsi

Mengatasi objek argumen mengakibatkan ralat:

Salin kod Kod adalah seperti berikut:

hujah = [...]; // tidak dibenarkan

Parameter dengan nama yang sama akan menyebabkan ralat:
Salin kod Kod adalah seperti berikut:

(fungsi(foo, foo) { }) // Ralat

Akses kepada arguments.caller dan arguments.callee akan membuang pengecualian. Oleh itu, sebarang fungsi tanpa nama yang perlu digunakan mesti dinamakan dahulu, contohnya:
Salin kod Kod adalah seperti berikut:

setTimeout(fungsi kemudian(){
// buat sesuatu...
setTimeout(kemudian, 1000);
}, 1000 );

Argumen fungsi, pemanggil dan sifat penerima tidak lagi wujud, dan operasi yang mentakrifkannya adalah dilarang.
Salin kod Kod adalah seperti berikut:

ujian fungsi() { }
test.caller = 'pemanggil'; // Ralat

Akhirnya, BUG yang sudah lama (dan sangat menjengkelkan) telah diselesaikan: apabila menggunakan null atau undefined sebagai parameter pertama kaedah Function.prototype.call atau Function.prototype.apply, bahagian dalam fungsi ini akan menghala ke objek global . Mod ketat akan menghalang pelaksanaannya dan membuang pengecualian:
Salin kod Kod adalah seperti berikut:

(function(){ ... }).panggilan(null); // Pengecualian

dengan() { }

dengan() { } pernyataan dipecahkan sepenuhnya dalam mod ketat.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn