【作用】
[1]消除js語法的一些不合理、不嚴謹、不安全問題,減少怪異行為並保證程式碼執行安全
[2]提高編譯器效率,增加執行速度
【使用】
[1]整個指令碼啟用嚴格模式,在頂部執行:"use strict";
[2]在指定函式中執行嚴格模式,在函式體第一行:"use strict"
[3]不支援strict模式的瀏覽器把"use strict"當做一個字串語句執行,支援strict模式的瀏覽器將開啟strict模式
[4]支援嚴格模式的瀏覽器包括IE10+、Firefox4+、safari12+、opera12+、chrome
【規則】
【1】變數
[a]不允許意外建立全域性變數
"use strict";
message = 'hello world!';
[b]不能對變數呼叫delete操作符
"use strict"; var color = 'red'; delete color;
【2】物件
[a]不能為只讀屬性賦值
"use strict"; var person = { name:'cook' }; Object.defineProperty(person,'name',{ writable: false }); person.name = 'Nicholas';
[b]不能為不可配置的屬性使用delete操作
"use strict"; var person = { name:'cook' }; Object.defineProperty(person,'name',{ configurable: false }); delete person.name;
【3】函式
[a]引數必須唯一
"use strict"; function sun(num,num){ //TODO }
[b]修改形參不會反映到arguments中
function showValue(value){ value = "Foo"; alert(arguments[0]); //非嚴格模式:"Foo" //嚴格模式:"Hi" } showValue("Hi");
[c]不允許使用arguments.callee和arguments.caller
"use strict"; function fn(num){ return arguments.callee(num); } fn(2);
"use strict"; function outer(){ inner(); } function inner(){ alert(inner.caller()); } outer();
【4】不允許eval()在包含上下文中建立變數或函式
"use strict"; function fn(){ eval("var x=10"); alert(x); } fn();
//允許以下操作 var result = eval("var x = 10, y = 11; x+y"); alert(result);//21
【5】不允許使用eval和arguments作為識別符號,也不允許讀寫他們的值
"use strict"; var eval = 10; var arguments = 20;
【6】不允許this值為null或undefined
"use strict"; var color = "red"; function fn(){ alert(this.color); } fn();
【7】不允許使用with語句
"use strict"; with(location){ alert(href); }
【8】不允許使用八進位制字面量
"use strict"; var value = 010;