欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript嚴(yán)格模式use strict的介紹

 更新時間:2021年12月02日 09:21:40   作者:一碗周  
這篇文章主要介紹了JavaScript嚴(yán)格模式use strict,嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式并不是JavaScript中的子集,它在語義上與正常的代碼有明顯的差異,下面我們就一起來學(xué)習(xí)該內(nèi)容吧,需要的朋友也可以參考一下

1.概述

1.1嚴(yán)格模式是什么

嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式并不是JavaScript中的子集,它在語義上與正常的代碼有明顯的差異。

雖然說現(xiàn)在大部分瀏覽器都已經(jīng)支持嚴(yán)格模式,但是還是有部分老版本的瀏覽器不支持嚴(yán)格模式,所以不要在未經(jīng)嚴(yán)格模式特性測試情況下使用嚴(yán)格模式。

JavaScript中的嚴(yán)格模式與非嚴(yán)格模式可以共存,所以在腳本中可以選擇性的加入嚴(yán)格模式。

1.2嚴(yán)格模式的目的

使用嚴(yán)格模式的目的如下所示:

首先,嚴(yán)格模式會將JavaScript陷阱直接變成明顯的錯誤。
其次,嚴(yán)格模式修正了一些引擎難以優(yōu)化的錯誤:同樣的代碼有些時候嚴(yán)格模式會比非嚴(yán)格模式下更快。
嚴(yán)格模式禁用了一些可能在未來版本定義的語法。

2.開啟嚴(yán)格模式

JavaScript中開啟嚴(yán)格模式分為兩種,分別是全局開啟嚴(yán)格模式和局部開啟嚴(yán)格模式。

2.1全局開啟嚴(yán)格模式

開啟全局嚴(yán)格模式只需要在所有的代碼前面輸入一段字符串,字符串如下:

"use strict";//或者'use strict';


需要注意的是,如果之前的JavaScript代碼是非嚴(yán)格模式的話,建立是不要為這段代碼開啟嚴(yán)格模式,這樣可能會出現(xiàn)問題。建議先從局部開啟嚴(yán)格模式,一步一步的調(diào)整代碼。

2.2局部開啟嚴(yán)格模式

局部開啟嚴(yán)格模式可以在某個指定的函數(shù)中的第一行加入"use strict";這段字符串,這個函數(shù)體外還是非嚴(yán)格模式。

開啟嚴(yán)格模式的實(shí)例代碼如下所示:

//全局開啟嚴(yán)格模式
//"use strict"
v = 100
console.log(v)

function fun() {
  //局部開啟嚴(yán)格模式
  'use strict'
  vv = 200
  console.log(vv)
}
// fun() 拋出異常 vv is not defined

3.嚴(yán)格模式中的變量

3.1禁止意外創(chuàng)建變量

所謂的意外創(chuàng)建變量就是指不使用var關(guān)鍵字聲明的變量。當(dāng)在嚴(yán)格模式下,如果意外創(chuàng)建全局變量,將會拋出異常,

示例代碼如下所示:

'use strict'
//在非嚴(yán)格模式下,這樣創(chuàng)建變量將不會報(bào)錯,但是在嚴(yán)格模式下這樣創(chuàng)建變量將會拋出異常
v = 100
console.log(v)


3.2靜默失敗轉(zhuǎn)為異常

所謂靜默失敗就是既不報(bào)錯也沒有任何效果,在嚴(yán)格模式下將會轉(zhuǎn)為異常。

3.3禁用delete關(guān)鍵字

在非嚴(yán)格模式下,對全局變量使用delete關(guān)鍵字將會出現(xiàn)靜默失敗,而在嚴(yán)格模式下,將會拋出異常,示例代碼如下所示

'use strict'
var v = 100
delete v // SyntaxError:Deleteofanunqualifiedidentifierinstrictmode.
console.log(v)


3.4對變量名的限制

在嚴(yán)格模式下,JavaScript對變量名也有限制,特別是不能使用保留字作為變量名,使用保留字作為符作為變量名會導(dǎo)致語法錯誤。

4.嚴(yán)格模式中的對象

4.1不可刪除的屬性

在非嚴(yán)格模式下,對不可刪除的屬性使用delete關(guān)鍵字將會出現(xiàn)靜默失敗,而在嚴(yán)格模式下,將會拋出異常。

示例代碼如下所示:

"use strict"
delete Object.prototype;//拋出異常


4.2只讀屬性的賦值

在非嚴(yán)格模式下,對一個只讀的屬性進(jìn)行賦值操將會靜默失敗,但是在嚴(yán)格模式下將會拋出異常,示例代碼如下:

'use strict'

var obj = {}
Object.defineProperty(obj, 'name', {
  value: '一碗粥',
})
obj.name = '一碗周' //拋出異常


4.3不可擴(kuò)展的對象

在非嚴(yán)格模式下,為不可擴(kuò)展的對象添加新的屬性將會靜默失敗,而在嚴(yán)格模式下將會拋出異常。

示例代碼如下所示:

//開啟全局嚴(yán)格模式
'use strict'
var obj = {}
//將悐變成不可擴(kuò)展的
Object.preventExtensions(obj)
//為對象擴(kuò)展屬性
obj.name = '一碗周' // 拋出異常


5.嚴(yán)格模式中的函數(shù)

5.1參數(shù)名必須唯一

在非嚴(yán)格模式下,函數(shù)的形參可以重復(fù),但是在嚴(yán)格模式中,如果函數(shù)的形參重復(fù)將會拋出異常,示例代碼如下所示:

'use strict'

function fun(a, a, b) {
  console.log(a + a + b)
}
/*
 *非嚴(yán)格模式下結(jié)果為7=2+2+3
 *嚴(yán)格模式下將會拋出異常
 */
fun(1, 2, 3)


5.2arguments的不同

在嚴(yán)格模式和非嚴(yán)格模式中,arguments對象的行為是不同的

具體不同如下所示:

  • 在非嚴(yán)格模式下,修改實(shí)參的值會也會反映到arguments對象中。
  • 在嚴(yán)格模式下,命名參數(shù)與‘arguments'對象是完全獨(dú)立的。

示例代碼如下所示:

'use strict'

function fun(v) {
  v = '100'
  console.log(v)
  console.log(arguments[0])
}
/*
 *在非嚴(yán)格模式中打印的結(jié)果為100,100
 *在嚴(yán)格模式中打印的結(jié)果為100,200
 */
fun(200)


5.3arguments.callee屬性

在非嚴(yán)格模式中的可以使用arguments.callee屬性,結(jié)果為當(dāng)前函數(shù)名稱,而在嚴(yán)格模式中,使用此屬性將會拋出異常。

示例代碼如下:

'usestrict'

functionfun(){
console.log(arguments.callee);
}
fun()//拋出異常


5.4函數(shù)聲明的限制

在嚴(yán)格模式下,只能在全局作用域和局部作用域中聲明函數(shù),除這兩種作用域外聲明函數(shù)語法是錯誤的(例如if語句塊)。

示例代碼如下所示:

'use strict'

function fun() {
  console.log(arguments.callee)
}
fun() //拋出異常

6.增加eval()作用域

在嚴(yán)格模式下,使用eval()函數(shù)創(chuàng)建的變量只能在函數(shù)內(nèi)部使用。

在外部使用將會拋出異常,示例代碼如下:

'use strict'
eval('var v=100')
console.log(v) //拋出異常

7.抑制this

在非嚴(yán)格模式下使用Fucntionapply()或者call()方法時,null或者undefined值會被轉(zhuǎn)換為全局對象。而嚴(yán)格模式下,函數(shù)的this值始終是指定的值。

示例代碼如下所示:

//開啟嚴(yán)格模式
'use strict'

var v = 100

function fn() {
  console.log(this.v)
}

var obj = {
  v: 200,
}

fn.call(obj) //this指向全局對象

結(jié)語:

本篇文章基本將嚴(yán)格模式的所有情況大致都有所介紹,解決日常開發(fā)中關(guān)于嚴(yán)格模式的問題足以應(yīng)對。

到此這篇關(guān)于JavaScript嚴(yán)格模式use strict的介紹的文章就介紹到這了,更多相關(guān)JavaScript嚴(yán)格模式use strict內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論