"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
它不是一條語(yǔ)句,但是是一個(gè)字面量表達(dá)式,在 JavaScript 舊版本中會(huì)被忽略。
use strict是ECMAscript5的特性,不建議在全局使用use strict,因?yàn)楫?dāng)壓縮不同文件時(shí)候,一個(gè)文件使用了use strict,一個(gè)沒(méi)有使用,沒(méi)有使用use strict的文件就會(huì)報(bào)錯(cuò)
1.作用
消除js語(yǔ)法不合理、不嚴(yán)謹(jǐn)、不安全的問(wèn)題;提高編譯器效率,增加運(yùn)行速度
2.支持的瀏覽器
IE10+,F(xiàn)irefox4+,safari12+,opera12+,chrome
3.規(guī)則
變量:
不允許創(chuàng)建全局變量 eg: name = "bella";
不能對(duì)變量進(jìn)行delete操作 eg: var name = "bella"; delete name;
對(duì)象:
不能為只讀屬性賦值:
ECMAscript5出現(xiàn)了Object.definePropotype方法改變了javascript語(yǔ)言中所有object是Public的這一說(shuō)法;
Object.definePropotype(obj,prop,descriptor):需要添加或修改的對(duì)象,屬性名稱,屬性描述;
var person = {name:"bella",sex:"female"};Object.definePropotype(person ,"name",{value:"alias",writable:false})
不能為不可配置的屬性使用delete操作
不可配置也是通過(guò)Object.definePropotype來(lái)設(shè)置的
var person = {name:"bella",sex:"female"};Object.definePropotype(person ,"name",{configurable:false})
函數(shù):
參數(shù)必須唯一 eg: function(a,a){}
修改形參不會(huì)影響arguments eg:funtion(arg1){ arg1 = "bella";} 非嚴(yán)格模式下arguments[0]:bella,arguments被修改了
不允許使用arguments.callee 和 arguments.caller
不允許eval()在包含上下文中創(chuàng)建變量或函數(shù)
一般都很少用eval,因?yàn)閑val會(huì)將字符串當(dāng)做js代碼來(lái)執(zhí)行,會(huì)改變上下文 eg:eval("var x = 10"); alert(x)這樣是不允許的
不允許this為null 或 undefined
不允許使用with語(yǔ)句
不允許使用八進(jìn)制字面量
為什么使用嚴(yán)格模式:
消除Javascript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為;
消除代碼運(yùn)行的一些不安全之處,保證代碼運(yùn)行的安全;
提高編譯器效率,增加運(yùn)行速度;
為未來(lái)新版本的Javascript做好鋪墊。
"嚴(yán)格模式"體現(xiàn)了Javascript更合理、更安全、更嚴(yán)謹(jǐn)?shù)陌l(fā)展方向,包括IE 10在內(nèi)的主流瀏覽器,都已經(jīng)支持它,許多大項(xiàng)目已經(jīng)開(kāi)始全面擁抱它。
另一方面,同樣的代碼,在"嚴(yán)格模式"中,可能會(huì)有不一樣的運(yùn)行結(jié)果;一些在"正常模式"下可以運(yùn)行的語(yǔ)句,在"嚴(yán)格模式"下將不能運(yùn)行。掌握這些內(nèi)容,有助于更細(xì)致深入地理解Javascript,讓你變成一個(gè)更好的程序員。