Mod ketat JavaS...LOGIN

Mod ketat JavaScript (gunakan ketat)

Ikhtisar

Selain mod larian biasa, ECMAscript 5 menambah mod larian kedua: "mod ketat". Seperti namanya, mod ini menjadikan Javascript dijalankan dalam keadaan yang lebih ketat.

Mengapa menggunakan mod ketat

- Hapuskan beberapa aspek sintaks Javascript yang tidak munasabah dan longgar dan kurangkan beberapa kelakuan aneh;

- Hilangkan beberapa rasa tidak selamat dalam menjalankan kod dan pastikan keselamatan kod berjalan;

- Meningkatkan kecekapan pengkompil dan meningkatkan kelajuan berjalan;

"Mod Ketat" mencerminkan hala tuju pembangunan Javascript yang lebih munasabah, lebih selamat dan lebih ketat, termasuk IE 10, sudah menyokongnya dan banyak projek besar telah mula menerimanya sepenuhnya.

Sebaliknya, kod yang sama mungkin mempunyai hasil larian yang berbeza dalam "mod ketat"; beberapa pernyataan yang boleh dijalankan dalam "mod biasa" tidak akan dapat dijalankan dalam "mod ketat". Menguasai kandungan ini akan membantu anda memahami Javascript dengan lebih terperinci dan menjadikan anda seorang pengaturcara yang lebih baik.

Masukkan bendera"gunakan ketat";


Cara untuk memanggil

1 Untuk satu skrip

<skrip> "guna ketat"; console. log("Ini adalah mod ketat.");
</skrip>


2 fungsi

fungsi ketat(){

 "guna ketat";

Kembalikan "Ini adalah mod ketat."; >

  kembali "Ini mod biasa.";

 }

3 cara alternatif untuk menulis fail skrip

(fungsi (){

"gunakan ketat";

// beberapa kod di sini

})();

Contoh 1:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = 3.14;       // 报错 (x 未定义)
</script>
</body>
</html>

Contoh 2:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
x = 3.14;       // 不报错 
myFunction();
function myFunction() {
   "use strict";
    y = 3.14;   // 报错 (y 未定义)
}
</script>
</body>
</html>


Perubahan sintaksis dan tingkah laku:

1 Pengisytiharan eksplisit pembolehubah global

Dalam mod biasa, jika pembolehubah diberikan nilai tanpa diisytiharkan, lalai ialah pembolehubah global. Mod ketat melarang penggunaan ini dan pembolehubah global mesti diisytiharkan secara eksplisit.

"gunakan ketat";

v = 1; // Ralat, v tidak diisytiharkan

untuk (i = 0; i < 2; i++) { // Ralat, i tidak diisytiharkan

}

Oleh itu, dalam mod ketat, pembolehubah adalah Ia mesti diisytiharkan dengan arahan var sebelum digunakan.


2 Pengikatan statik

Satu ciri bahasa Javascript ialah ia membenarkan "pengikatan dinamik", iaitu objek yang dimiliki oleh sifat dan kaedah tertentu. , tidak ditentukan pada masa penyusunan, tetapi pada masa jalan.

Mod ketat mengenakan beberapa sekatan pada pengikatan dinamik. Dalam sesetengah kes, hanya pengikatan statik dibenarkan. Dengan kata lain, objek yang dimiliki oleh sifat dan kaedah ditentukan semasa peringkat penyusunan. Ini akan membantu meningkatkan kecekapan penyusunan, menjadikan kod lebih mudah dibaca dan menyebabkan lebih sedikit kejutan.

Secara khusus, ia melibatkan aspek berikut.

(1) Dilarang menggunakan pernyataan with

kerana pernyataan with tidak boleh menentukan pada masa penyusunan objek mana yang dimiliki oleh atribut tersebut.

"guna ketat";

var v = 1;

dengan (o){ // Ralat sintaks

 v = 2;

}

(2) Cipta skop eval

Dalam mod biasa, bahasa Javascript mempunyai dua skop pembolehubah: skop global dan skop fungsi. Mod ketat mencipta skop ketiga: skop eval.

Dalam mod biasa, skop pernyataan eval bergantung pada sama ada dalam skop global atau skop fungsi. Dalam mod ketat, pernyataan eval itu sendiri adalah skop dan tidak lagi boleh menjana pembolehubah global Pembolehubah yang dijananya hanya boleh digunakan di dalam eval.

"gunakan ketat";

var x = 2;

console.info(eval(" var x = 5;

3 Langkah keselamatan yang dipertingkatkan (1) Larang kata kunci ini daripada menunjuk ke objek global

fungsi f(){

Kembalikan !ini;

}

// Kembalikan palsu kerana mata "ini" kepada objek global, "! ini" adalah palsu

fungsi f(){

 "guna ketat";

kembalikan !ini;

}

// Kembalikan benar, kerana dalam mod ketat, nilai ini tidak ditentukan, jadi "!ini" adalah benar.

(2) Dilarang melintasi timbunan panggilan di dalam fungsi

fungsi f1(){

 " gunakan ketat";

f1.pemanggil; // Laporan ralat

f1.arguments; // Laporan ralat

}

f1();

4 Pemadaman pembolehubah adalah dilarang

Tidak boleh dipadamkan dalam pembolehubah mod ketat. Hanya sifat objek dengan set boleh dikonfigurasikan kepada benar boleh dipadamkan.

"guna ketat";


var x;

padam x; // Ralat sintaks

var o = Object.create(null, {'x': {

 nilai: 1,

boleh dikonfigurasikan: benar

}});

padam o.x; // Berjaya padam


5 Pelaporan ralat eksplisit

Dalam mod biasa, apabila memberikan nilai kepada sifat baca sahaja objek, tiada ralat akan dilaporkan, hanya gagal secara senyap. Dalam mod ketat, ralat akan dilaporkan.

"guna ketat";

var o = {};

Object.defineProperty(o, "v", { nilai: 1, boleh ditulis: palsu });

o.v = 2; // Laporan ralat

Dalam mod ketat, gunakan Jika atribut yang dibaca oleh kaedah getter diberikan nilai, ralat akan dilaporkan.

"guna ketat";

var o = {

dapatkan v () { return 1; }

};

o.v = 2; // Ralat melaporkan

Ketat Dalam mod ini, menambah atribut baharu pada objek yang dilarang pengembangan akan mengakibatkan ralat.

"guna ketat";

var o = {};

Object.preventExtensions(o) ;

o.v = 1; // Laporan ralat

Dalam mod ketat, jika anda memadamkan atribut yang tidak boleh dipadamkan, ralat akan dilaporkan.

"gunakan ketat";

padam Object.prototype; // Laporan ralat


6 ralat nama pendua

Mod ketat telah menambahkan beberapa ralat sintaks baharu.

(1) Objek tidak boleh mempunyai atribut dengan nama pendua

Dalam mod biasa, jika objek mempunyai berbilang atribut dengan nama pendua, atribut terakhir yang diberikan akan menimpa nilai sebelumnya. Dalam mod ketat, ini adalah ralat sintaks.

"guna ketat";

var o = {

 p: 1,

 p: 2

}; // Ralat sintaks

(2) Fungsi tidak boleh mempunyai parameter dengan nama pendua

Dalam mod biasa, jika fungsi mempunyai berbilang parameter dengan nama yang sama, anda boleh menggunakan argumen[i] untuk membacanya. Dalam mod ketat, ini adalah ralat sintaks.

"guna ketat";

fungsi f(a, a, b) { // Ralat sintaks

  kembali ;

}


7 Notasi perlapanan adalah dilarang

Dalam mod biasa, jika digit pertama integer ialah 0, ia bermakna nombor perlapanan Contohnya, 0100 bersamaan dengan 64 dalam perpuluhan. Mod ketat melarang perwakilan ini, bit pertama integer ialah 0, dan ralat akan dilaporkan.

"guna ketat";

var n = 0100; // Ralat sintaks


8 Had objek argumen

argumen ialah objek parameter fungsi dan mod ketat mengehadkan penggunaannya.

(1) Penugasan kepada hujah tidak dibenarkan

"gunakan ketat";

argumen++; // Ralat sintaks

var obj = { set p(argumen) { } }; // Ralat sintaks

cuba { } tangkap (argumen) { } // Sintaks ralat

argumen fungsi() { } // Ralat sintaks

var f = new Function("arguments", "'use strict' ; return 17;"); // Ralat sintaks

(2) argumen tidak lagi menjejaki perubahan parameter

fungsi f(a) {

 a = 2;

 kembali [a, hujah[0]];

}

f(1); // Mod biasa ialah [2,2]

fungsi f(a) {

"guna ketat";

 a = 2;

 kembali [a, argumen[0]];

}

f(1); // Mod ketat ialah [2 ,1]

(3) Dilarang menggunakan hujah.callee

Ini bermakna anda tidak boleh memanggil dirinya di dalam fungsi tanpa nama.

"guna ketat";

var f = function() { return arguments.callee };

f(); // Laporan ralat


9 Fungsi mesti diisytiharkan di peringkat atas

Versi baharu Javascript pada masa hadapan Akan memperkenalkan "skop peringkat blok". Untuk mengekalkan selaras dengan versi baharu, mod ketat hanya membenarkan fungsi diisytiharkan dalam skop global atau peringkat atas skop fungsi. Iaitu, tidak dibenarkan mengisytiharkan fungsi dalam blok kod bukan fungsi.

"guna ketat";

jika (benar) {

 fungsi f() { } / / Ralat sintaks

}

untuk (var i = 0; i < 5; i++) {

 fungsi f2() { } // Ralat sintaks

}


10 Perkataan Terpelihara

Untuk beralih kepada versi baharu Javascript pada masa hadapan, mod ketat telah menambah beberapa perkataan tersimpan baharu: implements, interface, let, package, private, protected, public, static, yield .

Menggunakan perkataan ini sebagai nama pembolehubah akan mengakibatkan ralat.

pakej fungsi(dilindungi) { // Ralat sintaks

 "guna ketat";

 var melaksanakan ; // Ralat sintaks

}


bahagian seterusnya
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var public = 500; // 报错 </script> </body> </html>
babperisian kursus