詳解JavaScript嚴(yán)格模式的使用方法
要啟用嚴(yán)格模式,可以在代碼的頂部或函數(shù)體的開頭添加以下語(yǔ)句:
"use strict";
啟用嚴(yán)格模式后,會(huì)應(yīng)用一些限制和變化,包括以下幾個(gè)方面:
變量必須先聲明后使用:在嚴(yán)格模式下,變量必須通過 var、let 或 const 關(guān)鍵字進(jìn)行聲明,否則會(huì)拋出 ReferenceError。在非嚴(yán)格模式下,未聲明的變量會(huì)被隱式創(chuàng)建,并被添加到全局對(duì)象(比如瀏覽器環(huán)境中的 window 對(duì)象)中。
禁止刪除變量、函數(shù)或函數(shù)參數(shù):在嚴(yán)格模式下,使用 delete 操作符刪除變量、函數(shù)或函數(shù)參數(shù)會(huì)拋出 SyntaxError。
禁止對(duì)只讀屬性進(jìn)行賦值:在嚴(yán)格模式下,對(duì)只讀屬性(通過 const 關(guān)鍵字聲明的常量)進(jìn)行賦值會(huì)拋出 TypeError。
禁止使用八進(jìn)制字面量:在嚴(yán)格模式下,以 0 開頭的數(shù)字會(huì)被視為八進(jìn)制字面量,這在非嚴(yán)格模式下是允許的。嚴(yán)格模式下,使用八進(jìn)制字面量會(huì)拋出 SyntaxError。
限制 this 值:在嚴(yán)格模式下,函數(shù)內(nèi)部的 this 值不再是全局對(duì)象(比如瀏覽器環(huán)境中的 window 對(duì)象),而是undefined,除非通過 call()、apply() 或 bind() 明確指定。
禁止使用重復(fù)的函數(shù)參數(shù)名:在嚴(yán)格模式下,函數(shù)參數(shù)名不能重復(fù)。在非嚴(yán)格模式下,重復(fù)的函數(shù)參數(shù)名會(huì)被忽略。
禁止使用 with 語(yǔ)句:在嚴(yán)格模式下,使用 with 語(yǔ)句會(huì)拋出 SyntaxError。with 語(yǔ)句在非嚴(yán)格模式下允許將對(duì)象的屬性添加到作用域鏈中,但這被認(rèn)為是不推薦使用的特性,因?yàn)樗赡軐?dǎo)致代碼可讀性和性能問題。
限制 eval 和 arguments 的賦值:在嚴(yán)格模式下,無法對(duì) eval 和 arguments 進(jìn)行賦值。在非嚴(yán)格模式下,這種賦值是允許的。
下面是一些使用JavaScript嚴(yán)格模式的例子,展示了嚴(yán)格模式下的限制和行為變化:
- 變量必須先聲明后使用:
"use strict"; x = 10; // 拋出 ReferenceError: x is not defined
在嚴(yán)格模式下,對(duì)未聲明的變量進(jìn)行賦值會(huì)拋出錯(cuò)誤。
- 禁止刪除變量:
"use strict"; var x = 10; delete x; // 拋出 SyntaxError: Delete of an unqualified identifier in strict mode.
在嚴(yán)格模式下,無法使用 delete 操作符刪除變量。
- 禁止對(duì)只讀屬性進(jìn)行賦值:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", { value: 10, writable: false }); obj.x = 20; // 拋出 TypeError: Cannot assign to read only property 'x' of object '#<Object>'
在嚴(yán)格模式下,對(duì)只讀屬性進(jìn)行賦值會(huì)拋出錯(cuò)誤。
- 八進(jìn)制字面量的限制:
"use strict"; var num = 012; // 拋出 SyntaxError: Octal literals are not allowed in strict mode.
在嚴(yán)格模式下,使用八進(jìn)制字面量會(huì)被視為語(yǔ)法錯(cuò)誤。
- 函數(shù)中的 this 值為 undefined:
"use strict"; function showThis() { console.log(this); } showThis(); // undefined
在嚴(yán)格模式下,如果函數(shù)內(nèi)部的 this 值未明確指定,它將保持為 undefined。
這些是嚴(yán)格模式下的一些限制和變化,它們有助于提高代碼的可靠性和可維護(hù)性。在編寫新代碼或更新現(xiàn)有代碼時(shí),啟用嚴(yán)格模式是一種良好的實(shí)踐,可以幫助捕獲潛在的錯(cuò)誤并遵循更嚴(yán)格的編碼標(biāo)準(zhǔn)。
以上就是詳解JavaScript的嚴(yán)格模式的使用方法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript的嚴(yán)格模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript運(yùn)動(dòng)框架 多物體任意值運(yùn)動(dòng)(三)
這篇文章主要為大家詳細(xì)介紹了JavaScript運(yùn)動(dòng)框架的第三部分,多物體任意值運(yùn)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05前端JavaScript實(shí)現(xiàn)大數(shù)據(jù)前后模糊搜索的方法詳解
這篇文章主要為大家詳細(xì)介紹了前端JavaScript實(shí)現(xiàn)大數(shù)據(jù)前后模糊搜索的四個(gè)常見方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2023-12-12jquery和js顯示和隱藏div的幾種方法對(duì)比整理
jQuery是基于JavaScript的一種框架。jQuery封裝js和Ajax的功能,提供函數(shù)接口,簡(jiǎn)化js的操作。使用jquery來顯示或者隱藏div真的很方便。2023-02-02JavaScript 實(shí)現(xiàn)鼠標(biāo)拖動(dòng)元素實(shí)例代碼
這篇文章主要介紹了JavaScript 實(shí)現(xiàn)鼠標(biāo)拖動(dòng)元素實(shí)例代碼,需要的朋友可以參考下2014-02-02