ECMAScript 5中引入的JavaScript嚴(yán)格模式是選擇加入 JavaScript受限變體的一種方式。
嚴(yán)格模式不僅僅是一個(gè)子集:它有意地具有與普通代碼不同的語(yǔ)義。
嚴(yán)格模式使編寫(xiě)“安全” JavaScript更加容易。
嚴(yán)格模式將以前接受的“錯(cuò)誤語(yǔ)法”更改為實(shí)際錯(cuò)誤。
在嚴(yán)格模式下,例如,您不能使用未聲明的變量。
嚴(yán)格模式是通過(guò)"use strict";在腳本或函數(shù)的開(kāi)頭添加來(lái)聲明的。
要為整個(gè)腳本調(diào)用嚴(yán)格模式,在任何其他任何聲明之前,輸入語(yǔ)句“use strict” ::
"use strict"; str = "嗨,我是嚴(yán)格模式腳本!"; // 導(dǎo)致錯(cuò)誤,因?yàn)槲绰暶鱯tr測(cè)試看看?/?
要為函數(shù)調(diào)用嚴(yán)格模式,請(qǐng)將確切的語(yǔ)句"use strict";放在函數(shù)的主體中,然后放在其他任何語(yǔ)句之前:
function myFunc() { // 函數(shù)級(jí)嚴(yán)格模式語(yǔ)法 "use strict"; str = "大家好,我是嚴(yán)格模式函數(shù)!"; // 這將導(dǎo)致一個(gè)錯(cuò)誤 return str; }測(cè)試看看?/?
嚴(yán)格模式可以幫助您編寫(xiě)更簡(jiǎn)潔的代碼,例如防止使用未聲明的變量。
該"use strict"指令只能在腳本或函數(shù)的開(kāi)頭識(shí)別。
單引號(hào)和雙引號(hào)語(yǔ)法都是可以接受的('use strict';或"use strict";)。
如您所知,在嚴(yán)格模式下,必須聲明所有變量。
如果將值分配給不是聲明變量的標(biāo)識(shí)符,則將引發(fā)ReferenceError:
"use strict"; x = 5; // ReferenceError: x 沒(méi)有定義測(cè)試看看?/?
不允許使用未聲明的對(duì)象(對(duì)象也是變量):
"use strict"; coord = {x:10, y:20}; // ReferenceError: coord 沒(méi)有定義測(cè)試看看?/?
在嚴(yán)格模式下,如果嘗試刪除變量,則會(huì)拋出語(yǔ)法錯(cuò)誤:
"use strict"; var msg = "Hello World"; delete msg;// SyntaxError測(cè)試看看?/?
同樣,當(dāng)您嘗試在嚴(yán)格模式下刪除函數(shù)時(shí),會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤:
"use strict"; function sum(a, b) { return a + b; } delete sum;// SyntaxError測(cè)試看看?/?
在嚴(yán)格模式下,不允許重復(fù)參數(shù)名稱(chēng):
"use strict"; function square(a, a) { // SyntaxError return a * a; }測(cè)試看看?/?
在嚴(yán)格模式下,不允許寫(xiě)入只讀屬性:
"use strict"; var person = {name: "Akash", age: 22}; Object.defineProperty(person, "gender", {value: "male", writable: false}); person.gender = "female"; // TypeError測(cè)試看看?/?
在嚴(yán)格模式下,不允許使用with語(yǔ)句:
"use strict"; with (Math){x = sqrt(25)}; // SyntaxError測(cè)試看看?/?
在嚴(yán)格模式下,不允許使用八進(jìn)制數(shù)字:
"use strict"; var x = 010; // SyntaxError測(cè)試看看?/?
出于安全原因,eval()不允許在調(diào)用它的范圍內(nèi)創(chuàng)建變量:
"use strict"; eval("var x = 10;"); console.log(x); // ReferenceError: x 變量沒(méi)有定義測(cè)試看看?/?
字符串“eval”不能用作標(biāo)識(shí)符(變量名):
"use strict"; var eval = "(cainiaoplus.com)";// SyntaxError測(cè)試看看?/?
字符串“arguments”不能用作標(biāo)識(shí)符(變量名):
"use strict"; var arguments = "(cainiaoplus.com)";// SyntaxError測(cè)試看看?/?
將來(lái)的ECMAScript版本可能會(huì)引入新的語(yǔ)法,ES5中的嚴(yán)格模式會(huì)應(yīng)用一些限制以簡(jiǎn)化過(guò)渡。
如果在嚴(yán)格模式中禁止這些更改的基礎(chǔ),則更容易進(jìn)行一些更改。
在嚴(yán)格模式下,以下標(biāo)識(shí)符列表成為保留關(guān)鍵字:
implements
interface
let
package
private
protected
public
static
yield
"use strict"; var package = true; // This will cause an error測(cè)試看看?/?