【做用】chrome
[1]消除js語法的一些不合理、不嚴謹、不安全問題,減小怪異行爲並保證代碼運行安全瀏覽器
[2]提升編譯器效率,增長運行速度安全
【使用】函數
[1]整個腳本啓用嚴格模式,在頂部執行:"use strict";this
[2]在指定函數中執行嚴格模式,在函數體第一行:"use strict"spa
[3]不支持strict模式的瀏覽器把"use strict"當作一個字符串語句執行,支持strict模式的瀏覽器將開啓strict模式code
[4]支持嚴格模式的瀏覽器包括IE10+、Firefox4+、safari12+、opera12+、chrome對象
【規則】
【1】變量
[a]不容許意外建立全局變量blog
"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;