国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

嚴格模式的簡單認識

learning / 1951人閱讀

摘要:不支持嚴格模式的瀏覽器與嚴格模式的瀏覽器行為也不一樣,所以不要在未經嚴格模式特性測試情況下使用嚴格模式。在嚴格模式下,使用上述標識符作為變量名會導致語法錯誤。嚴格模式下,命名參數與對象是完全獨立的。在嚴格模式下,函數的值始終是指定的值。

嚴格模式 概述

嚴格模式是什么

嚴格模式是JavaScript中的一種限制性更強的變種模式。嚴格模式不是一個子集:它的語義上與正常代碼有著明顯的差異。
不支持嚴格模式的瀏覽器與嚴格模式的瀏覽器行為也不一樣,所以不要在未經嚴格模式特性測試情況下使用嚴格模式。
嚴格模式可以與非嚴格模式共存,所以腳本可以逐漸的選擇性加入嚴格模式。

嚴格模式的目的

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

開啟嚴格模式

全局開啟嚴格模式

在JavaScript中想要開啟嚴格模式,需要在所有代碼之前,定義一個不會賦給任何變量的字符串:
"use strict";//或者‘use strict’ ;
如果之前的JavaScript代碼是非嚴格模式的話,建議不要盲目為這段代碼開啟嚴格模式,這樣可能會出現問題。建議按一個個函數去開啟嚴格模式。

函數開啟嚴格模式

也可以為某個指定的函數開啟嚴格模式,如下代碼示例:
//函數外依舊是非嚴格模式
function doSomething(){
‘user strict’};開啟嚴格模式
//其他代碼
}
在匿名函數中使用嚴格模式,相當于在全局開啟嚴格模式的變通實現方式。
(function(){
"use strict"};//開啟嚴格模式
})();

變量

禁止意外創建嚴格變量

在嚴格模式下,不允許意外創建全局變量。
如下代碼是非嚴格模式下意外創建的全局變量。
//message="this is message";
如下代碼是嚴格模式下意外創建全局變量。
"use strict";//開啟嚴格模式
//嚴格模式下,意外創建全局變量,拋出ReferenceError
message = "this is message";

靜默失敗轉為異常

所謂靜默失敗就是既不報錯也沒有任何效果,例如改變常量的值。在嚴格模式下,靜默失敗會轉換成拋出異常。
如下代碼是非嚴格模式下的靜默失敗。
const PI= 3.14;
PI =1.14;//靜默失敗
console.log (PI);//3.14
如下代碼是嚴格模式下的靜默失敗。
"use strict";//開啟嚴格模式
const PI=3.14;
PI=1.14;//拋出Type Error錯誤

禁用delete 關鍵字

在嚴格模式下,不能對變量使用delete運算符。
如下代碼是非嚴格模式下使用delete運算符,結果會靜默失敗。
var =color = "red";
delete color ;
如下代碼是嚴格模式下使用delete運算符,結果會拋出異常。
"use strict";//開啟嚴格模式
var =color ="red";
delete color ;//拋出ReferenceError錯誤
對變量名的限制
在嚴格模式下,JavaScript對變量名也是有限制。特別不能使用如下內容作為變量名:
implements,interface ,let ,package,private ,protected ,public , static,
yield。
上述內容都是保留字 在ECMAScript的下一個版本中可能會用到他們。在嚴格模式下,使用上述標識符作為變量名會導致語法錯誤。

對象

不可刪除的屬性

在嚴格模式下,不能使用delete運算符刪除不可刪除的屬性。
如下代碼是嚴格模式下使用delete運算符刪除不可刪除的屬性,結果會靜默失敗。
delete Objcet.prototype;
如下代碼是嚴格模式下使用delete元素安撫刪除不可刪除的屬性,結果會拋出異常。
"use strict";//開啟嚴格模式

delete Object.prototype;//拋出TypeError錯誤

屬性名必須唯一

在嚴格模式下,一個對象內的所有屬性名在對象內必須唯一。
如下代碼是在非嚴格模式下重名屬性是允許的,最后一個屬性決定屬性值
var 0 ={ p:1 ,p:2};
如下代碼是嚴格模式下重命屬性被認為是錯誤語法。
"use strict ";開啟嚴格模式。
var 0= {p:1,p:2};//報錯

只讀屬性賦值 在嚴格模式下,不能為一個只讀屬性進行重新賦值

如下代碼是在開啟嚴格模式下為只讀屬性重新賦值,結果會拋出異常 。
"use strict";開啟嚴格模式
var obj1={};
Object.defoneProperty(OBJ1,‘x’),{value 42,writable:false});obj1.x=9;//將屬性設置為只讀

不可擴展的對象

在嚴格模式下不能為不可擴展的對象添加新屬性。
"use strict";開啟嚴格模式
var obj={}
Object.preventExtensions(obj);//將對象變得不可擴展
obj.newprop ="ohai";//拋出typeError錯誤
結果會出現異常

函數

參數名必須唯一

在嚴格模式下,要求命名函數的參數必須唯一。
function sum(a,a,b){
//語法錯誤
"use strict";
return a+a+c;//代碼運行到這里會報錯
}

arguments的不同

在嚴格模式下,arguments對象的行為也有所不用。
嚴格模式下,修改命名參數的值也會反應到argument對象中。
嚴格模式下,命名參數與arguments對象是完全獨立的。
function showValue(value){
value ="foo";
console.log(value);//foo
console.log(arguments[0]);//在嚴格模式下foo
//在非嚴格模式下hello
}
showValue ("hello");
arguments.callee()
在嚴格模式下,不能使用arugments 對象的callee()方法。
在嚴格模式下使用arguments對象的callee()方法,結果會拋出異常。
"use strict";//開啟嚴格模式
var f =function(){
return arguments.callee;};
f();//拋出TypeError錯誤
函數聲明的限制
在嚴格模式下,只能在全局和函數域中聲明函數
如下代碼是嚴格模式下在出全局域和函數域中聲明函數是錯誤語法
"use strict";//開啟嚴格模式
if(true){
function f(){}//錯誤語法
}

eval(函數)

增加eval作用域

在嚴格模式下,使用eval()函數創建的變量只能在eval()函數內部使用。
如下代碼是嚴格下eval()函數創建的變量只能在eval()函數內部使用
"use strict";開啟嚴格模式
eval("var x =412");
console.log(x);//拋出RefeienceError錯誤

arguments對象

禁止讀寫

在嚴格模式下,以下的所有嘗試導致語法錯誤:
"use strict";開啟嚴格模式
eval=17 ;
arguments++;
++eval;
var obj ={set p (arguments){}};
var eval;
try {}catch(arguments){}
function x(eval){}
function arguments(){}
var y =function eval(){}
var f =new Function("arguments","use strict","return 17");

this 關鍵字

抑制關鍵字

在嚴格模式下使用函數的apply()call()方法是,NULL或undefind值會被轉換為全局對象。
在嚴格模式下,函數的this值始終是指定的值。
var color ="red";
function sayColor(){
console.log(this.color)}//非嚴格模式下red
//嚴格模式下 拋出錯誤
}
say Color.call(null);

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97075.html

相關文章

  • 第一天 重新認識JavaScript

    摘要:使用表明你的比較不會涉及任何的隱形的類型轉換。當對不同類型的數據進行比較的時候你要首先把它們進行顯示的類型轉換。然后再進行比較這樣會使你的程序更加清晰。 1、JavaScript 嚴格模式 通過在程序最開始假如一個字符串字面量 use strict ,即可開啟嚴格模式 嚴格模式可以讓JS代碼擁有更好的兼容性,更強的健壯性 在嚴格模式下,重新聲明 arguments 會報錯,非嚴格模式...

    fizz 評論0 收藏0
  • 【進階3-2期】JavaScript深入之重新認識箭頭函數this

    摘要:箭頭函數的尋值行為與普通變量相同,在作用域中逐級尋找。題目這次通過構造函數來創建一個對象,并執行相同的個方法。 我們知道this綁定規則一共有5種情況: 1、默認綁定(嚴格/非嚴格模式) 2、隱式綁定 3、顯式綁定 4、new綁定 5、箭頭函數綁定 其實大部分情況下可以用一句話來概括,this總是指向調用該函數的對象。 但是對于箭頭函數并不是這樣,是根據外層(函數或者全局)作用域(...

    Rainie 評論0 收藏0
  • 面試官問:能否模擬實現JScall和apply方法

    摘要:之前寫過兩篇面試官問能否模擬實現的操作符和面試官問能否模擬實現的方法其中模擬方法時是使用的和修改指向。但面試官可能問能否不用和來實現呢。使用模擬實現的瀏覽器環境非嚴格模式方法的屬性是。 之前寫過兩篇《面試官問:能否模擬實現JS的new操作符》和《面試官問:能否模擬實現JS的bind方法》 其中模擬bind方法時是使用的call和apply修改this指向。但面試官可能問:能否不用cal...

    wuyangnju 評論0 收藏0
  • JavaScript 中 this 指向問題

    摘要:首發個人博客中的,大家都用過。箭頭函數,詞法作用域中的簡單的說,箭頭函數中的,會綁定到函數外也就是上一層作用域中的,函數外的指向哪,箭頭函數中的就指向哪。 首發個人博客 JavaScript 中的 this ,大家都用過。但是它到底指向哪里呢?今天在閱讀 《你不知道的JavaScript (上卷)》再結合自己平時看的博客,對它又有了新的認識,在此來做個小結,再碰到 this ,就再也不...

    DTeam 評論0 收藏0
  • 關于javascript中this指向

    摘要:關于中的指向我上的菜鳥倉庫地址點擊跳轉查看其他相關文章文章在我的博客上的地址點擊跳轉學習,必不可少的肯定要理解的指向。 關于javascript中this的指向 我GitHub上的菜鳥倉庫地址: 點擊跳轉查看其他相關文章 文章在我的博客上的地址: 點擊跳轉 ? ? ? ? 學習javascript,必不可少的肯定要理解this的指向。要學習this指向之前,就要先理解了我前面寫的幾...

    shinezejian 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<