Mod ketat JavaScript


Mod ketat JavaScript (mod ketat) berjalan dalam keadaan ketat.


Gunakan arahan "guna ketat"

Arahan "guna ketat" adalah baharu dalam JavaScript 1.8.5 (ECMAScript5).

Ia bukan pernyataan, tetapi ungkapan literal, yang akan diabaikan dalam versi JavaScript yang lebih lama.

Tujuan "menggunakan ketat" adalah untuk menyatakan bahawa kod tersebut dilaksanakan di bawah syarat yang ketat.

Anda tidak boleh menggunakan pembolehubah tidak diisytiharkan dalam mod ketat.


NotePelayar yang menyokong mod ketat:
Note支持严格模式的浏览器:
Internet Explorer 10 +、 Firefox  4+ Chrome  13+、 Safari 5.1+、 Opera 12+。
Internet Explorer 10+, Firefox 4 + Chrome 13+, Safari 5.1+, Opera 12+.

Pengisytiharan mod ketat

Mod ketat diisytiharkan dengan menambahkan ungkapan "guna ketat" di kepala skrip atau fungsi.

Dalam contoh, kita boleh menekan F12 dalam penyemak imbas (atau klik "Tools>More Tools>Developer Tools") untuk menghidupkan mod nyahpepijat dan melihat mesej ralat.


Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用未定义的变量。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = 3.14;       // 报错 (x 未定义)
</script>

</body>
</html>

Run Instance»

Klik "Run Instance" butang Lihat kejadian dalam talian


Tindakan

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h2>全局 "use strict" 声明.</h2>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
myFunction();
function myFunction() {
    y = 3.14;   // 报错 (y 未定义)
}
</script>

</body>
</html>

Tindakan berjalan»

Klik butang "Jalankan Instance" untuk melihat contoh dalam talian

Diisytiharkan di dalam fungsi sebagai skop setempat (hanya gunakan mod ketat dalam fungsi):

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<p>在函数内使用 "use strict" 只在函数内报错。
</p>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
x = 3.14;       // 不报错 
myFunction();
function myFunction() {
   "use strict";
    y = 3.14;   // 报错 (y 未定义)
}
</script>

</body>
</html>

Jalankan contoh»

Klik butang "Jalankan contoh" untuk melihat contoh dalam talian


Mengapa gunakan mod ketat:

  • Hapuskan beberapa aspek sintaks Javascript yang tidak munasabah dan tidak tepat, dan kurangkan beberapa kelakuan pelik; operasi, memastikan keselamatan berjalan Kod;

  • 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 telah menyokongnya, dan banyak projek besar sudah 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.
  • Sekatan mod ketat
Pembolehubah tidak diisytiharkan tidak dibenarkan:

Instance


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用未定义的变量。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = 3.14;       // 报错 (x 未定义)
</script>

</body>
</html>

Jalankan Instance»

Klik butang "Run Instance" untuk melihat contoh dalam talian

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用为定义的对象。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = {p1:10, p2:20};      // 报错 (x 未定义)
</script>

</body>
</html>

Run Instance»

Klik butang "Run Instance" untuk melihat instance dalam talian

Pemadaman pembolehubah atau objek tidak dibenarkan.

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许删除变量或对象。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var x = 3.14;
delete x;    
</script>

</body>
</html>

Run Instance»

Klik butang "Run Instance" untuk melihat contoh dalam talian

Pemadaman fungsi tidak dibenarkan.

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许删除函数。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
function x(p1, p2) {}; 
delete x;  
</script>

</body>
</html>

Run Instance»

Klik butang "Run Instance" untuk melihat contoh dalam talian

Nama pembolehubah pendua tidak dibenarkan:

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许变量重名。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
function x(p1, p1) {};   // 报错
</script>
	
</body>
</html>

Run Instance»

Klik Butang "Jalankan Instance" Lihat kejadian dalam talian

Oktal tidak dibenarkan:

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用八进制。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var x = 010;             // 报错
</script>

</body>
</html>

Jalankan instance»

Klik butang "Jalankan Instance" untuk melihat contoh dalam talian

Aksara melarikan diri tidak dibenarkan:

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用转义字符。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var x = 0;            // 报错
</script>

</body>
</html>

Jalankan Instance»

Klik butang "Run Instance" untuk melihat contoh dalam talian

Penugasan atribut baca sahaja tidak dibenarkan:

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许对只读属性赋值。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14;            // 报错
</script>

</body>
</html>

Run instance»

Klik butang "Run instance" untuk melihat instance dalam talian

Tidak membenarkan membaca menggunakan kaedah getter pada Berikan nilai kepada atribut

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许对一个使用getter方法读取的属性进行赋值。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14;            // 报错
</script>

</body>
</html>

Jalankan instance »

Klik butang "Jalankan Instance" untuk melihat contoh dalam talian

Tidak dibenarkan memadamkan atribut yang tidak dibenarkan untuk dipadamkan:

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许删除一个不允许删除的属性值。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
delete Object.prototype; // 报错
</script>

</body>
</html>

Instance berjalan »

Klik butang "Run Instance" untuk melihat contoh dalam talian

Pembolehubah nama tidak boleh menggunakan rentetan "eval":

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>变量名不能使用 "eval" 字符串。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var eval = 3.14;         // 报错
</script>

</body>
</html>

Run instance»

Klik "Run instance" butang untuk melihat contoh dalam talian

Nama pembolehubah tidak boleh menggunakan rentetan "argumen":

Contoh

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>变量名不能使用 "arguments" 字符串。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var arguments = 3.14;    // 报错
</script>

</body>
</html>

Jalankan Instance»

Klik butang "Run Instance" untuk melihat contoh dalam talian

Pernyataan berikut tidak dibenarkan:

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用以下这种语句。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
with (Math){x = cos(2)}; // 报错
</script>

</body>
</html>

Run Instance»

Klik butang "Run Instance" untuk melihat instance dalam talian

Due untuk beberapa sebab keselamatan, dalam Pembolehubah yang dicipta oleh skop eval() tidak boleh dipanggil:

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
	
<h1>使用 "use strict":</h1>
<h3>由于一些安全原因,在作用域 eval() 创建的变量不能被调用。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
eval ("var x = 2");
alert (x);               // 报错
</script>

</body>
</html>

Jalankan instance»

Klik butang "Jalankan" Instance" untuk melihat kejadian dalam talian

melarang kata kunci ini daripada menunjuk ke objek global.

function f(){
	return !this;
} 
// 返回false,因为"this"指向全局对象,"!this"就是false

function f(){ 
	"use strict";
	return !this;
} 
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

Oleh itu, jika anda terlupa untuk menambah baharu apabila menggunakan pembina, ini tidak lagi akan menunjuk ke objek global, tetapi ralat akan dilaporkan.

function f(){
	"use strict";
	this.a = 1;
};
f();// 报错,this未定义

Kata kunci tersimpan

Untuk beralih kepada versi Javascript baharu pada masa hadapan, mod ketat telah menambah beberapa kata kunci terpelihara baharu:

  • melaksanakan

  • antara muka

  • biarkan

  • pakej

  • peribadi

  • dilindungi

  • awam

  • statik

  • hasil

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>严格模式不允许使用保留关键字。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var public = 1500;      // 报错
</script>

</body>
</html>

Jalankan instance»

Klik " Jalankan butang "Contoh" untuk melihat contoh dalam talian


Note"use strict" 指令只运行出现在脚本或函数的开头。