成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript - 嚴(yán)格模式

PrototypeZ / 303人閱讀

摘要:概述嚴(yán)格模式是什么嚴(yán)格模式是中的一種限制性更強(qiáng)的變種方式。在嚴(yán)格模式下,靜默失敗會(huì)轉(zhuǎn)為報(bào)錯(cuò)。拋出錯(cuò)誤非嚴(yán)格模式下靜默錯(cuò)誤屬性名必須唯一在嚴(yán)格模式下,一個(gè)對(duì)象內(nèi)的所有屬性名必須唯一。非嚴(yán)格模式最后一個(gè)重名參數(shù)會(huì)覆蓋之前的重名參數(shù)。

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

嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。
嚴(yán)格模式可以和非嚴(yán)格模式共存,所以腳本可以逐漸的選擇性加入嚴(yán)格模式。

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

嚴(yán)格模式會(huì)將js陷阱直接變成明顯的錯(cuò)誤

嚴(yán)格模式修正了一些引擎難以優(yōu)化的錯(cuò)誤:同樣的代碼有些時(shí)候在嚴(yán)格模式下更快

嚴(yán)格模式禁用了一些課鞥在未來(lái)版本中定義的語(yǔ)法

開(kāi)啟嚴(yán)格模式

在js中想要開(kāi)啟嚴(yán)格模式,需要在代碼之前定義一個(gè)不會(huì)賦給任何變量的固定的字符串
"use strict";或者"use strict";

//全局作用域開(kāi)啟嚴(yán)格模式
"use strict";

//函數(shù)作用域開(kāi)啟嚴(yán)格模式
function fun (){
    "use strict"http://作用于函數(shù)作用域
    //其他代碼
}
變量 禁止意外的創(chuàng)建變量

在嚴(yán)格模式下,創(chuàng)建變量必須使用var關(guān)鍵字聲明變量

//全局開(kāi)啟嚴(yán)格模式
"use strict";

//創(chuàng)建全局變量,但不使用var關(guān)鍵字
//num = 233;//在非嚴(yán)格模式定義變量可以不使用var關(guān)鍵字,嚴(yán)格模式報(bào)錯(cuò)
//console.log(num);//ReferenceError: num is not defined

/*function fun() {
    v = 100;//在函數(shù)作用域中定義變量不適用var關(guān)鍵字,自動(dòng)提升為全局變量
    console.log(v)
}
fun();//ReferenceError: v is not defined*/

function fn() {
    var a = 200;
    console.log(a)
}
fn();//200
靜默失敗轉(zhuǎn)為異常

所謂靜默失敗就是既不報(bào)錯(cuò)也沒(méi)有任何效果,例如改變常量的值。在嚴(yán)格模式下,靜默失敗會(huì)轉(zhuǎn)為報(bào)錯(cuò)。

"use strict"
const v = 23;//非嚴(yán)格模式下會(huì)靜默失敗
v = 10;//TypeError: Assignment to constant variable.
##禁用delete關(guān)鍵字
在嚴(yán)格模式下,不能對(duì)變量使用delete關(guān)鍵字

"use strict"
//定義全局變量
var v = 23;
delete v;//嚴(yán)格模式:SyntaxError: Delete of an unqualified identifier in strict mode.
console.log(v);//非嚴(yán)格模式:undefined
//嚴(yán)格模式下delete關(guān)鍵字只是不能對(duì)變量使用

##對(duì)變量名的限制
在嚴(yán)格模式中,不能使用保留字作為變量名,會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤
在非嚴(yán)格模式中可以使用保留字作為變量名

![clipboard.png](/img/bVbfPEs)

"use strict";
var let = 23;//拋出錯(cuò)誤:SyntaxError: Unexpected strict mode reserved word

#對(duì)象
##不可刪除的屬性
在嚴(yán)格模式下,不能用delete運(yùn)算符刪除不可刪除的屬性。

"use strict";
delete Object.portotype;//拋出錯(cuò)誤:TypeError: Cannot delete property "prototype" of function Object() { [native code] }
//非嚴(yán)格模式下:靜默錯(cuò)誤

##屬性名必須唯一
在嚴(yán)格模式下,一個(gè)對(duì)象內(nèi)的所有屬性名必須唯一。

"use strict"
var v {
a = 1,//嚴(yán)格模式下對(duì)象內(nèi)的同名屬性編輯器會(huì)報(bào)錯(cuò),運(yùn)行時(shí)不報(bào)錯(cuò)、輸出結(jié)果與非嚴(yán)格模式一致
a = 2
};
console.log(v.a)//2

##只讀屬性的賦值
在嚴(yán)格模式下,不能為一個(gè)只讀的屬性賦值,會(huì)報(bào)錯(cuò)/非嚴(yán)格模式下,靜默失敗。

"use strict"
var obj = {

 name : "火鍋"

};
//獲取屬性描述符
console.log(Object.getOwnPropertyDescriptor(obj,"name"));
//給對(duì)象obj添加只讀屬性
Object.defineProperty(obj,"age",{

value:2

});
console.log(Object.getOwnPropertyDescriptor(obj,"age"));

//給只讀屬性賦值 - 只讀屬性不能賦值,非嚴(yán)格模式下靜默失敗
obj.age = 3;//嚴(yán)格模式:TypeError: Cannot assign to read only property "age" of object "#"
console.log(obj.age);

##不可擴(kuò)展的對(duì)象
在嚴(yán)格模式下,不能為不可擴(kuò)展的對(duì)象去添加新屬性

"use strict";
//創(chuàng)建一個(gè)空對(duì)象
var obj = {};
//將對(duì)象設(shè)置為不可擴(kuò)展 - 即不能添加新屬性
Object.preventExtensions(obj);
//為對(duì)象添加新屬性 - 非嚴(yán)格模式:靜默失敗
obj.name = "九筒";//嚴(yán)格模式:TypeError: Cannot add property name, object is not extensible
console.log(obj.name);

#函數(shù)
##參數(shù)名必須唯一
在嚴(yán)格模式中,要求命名函數(shù)的的參數(shù)必須唯一。
非嚴(yán)格模式:最后一個(gè)重名參數(shù)會(huì)覆蓋之前的重名參數(shù)。

"use strict"
function fun (a,a,b){//嚴(yán)格模式:重名參數(shù)被認(rèn)為語(yǔ)法錯(cuò)誤
console.log(a+a+b)//拋出錯(cuò)誤:SyntaxError: Duplicate parameter name not allowed in this context
}
fun(1,2,3)

##arguments 的不同
- 嚴(yán)格模式:argumengs不受形參影響
- 非嚴(yán)格模式:argumengs與形參有關(guān)

function fun (value){

 var value = "火鍋";
 console.log(value);//火鍋 - 就近原則
 console.log(arguments[0])//嚴(yán)格模式:九筒   非嚴(yán)格模式:火鍋 - 就近原則

}
fun("九筒");

##arguments對(duì)象的callee()方法
在嚴(yán)格模式中,不能使用arguments對(duì)象的callee()方法
非嚴(yán)格模式下使用arguments.callee表示調(diào)用函數(shù)本身。

"use strict"
function fun (){

return arguments.callee;//拋出TypeError錯(cuò)誤

}

##函數(shù)聲明的限制
在嚴(yán)格模式下,只能在全局作用域和函數(shù)作用域中聲明函數(shù)
非嚴(yán)格模式可以在任意位置聲明函數(shù)

"use strict"
if(true){
function fun (){}//在塊級(jí)作用域(非全局和函數(shù)作用域)聲明函數(shù):語(yǔ)法錯(cuò)誤
}
fun()// 拋出錯(cuò)誤 ReferenceError: fun is not defined

#增加eval()作用域
在嚴(yán)格模式中,使用eval()函數(shù)創(chuàng)建的變量只能在eval()函數(shù)內(nèi)部使用
非嚴(yán)格模式下,eval()函數(shù)創(chuàng)建的變量可以在其他位置使用

"use strict"
eval("var v = 23");
console.log(v);//拋出eferenceError: v is not defined

#禁止讀寫(xiě)
在嚴(yán)格模式下:禁止使用eval()和arguments作為標(biāo)識(shí)符,也不允許讀寫(xiě)他們的值

"use strict";
//以下全部語(yǔ)法錯(cuò)誤
var eval = 12
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關(guān)鍵字
抑制this 
- 非嚴(yán)格模式使用apply()和call()方法時(shí),null或undefined值會(huì)轉(zhuǎn)換為全局對(duì)象
- 嚴(yán)格模式下,函數(shù)的this值始終是指定的值(無(wú)論是什么值)

"use strict"
var v = 2;
function fun (){
console.log(this.v);
}
var obj ={
v : 3
};
fun.call(null);// TypeError: Cannot read property "v" of null

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96983.html

相關(guān)文章

  • JavaScript面向?qū)ο笾械?em>嚴(yán)格模式

    摘要:開(kāi)啟嚴(yán)格模式設(shè)置對(duì)象是一個(gè)不可擴(kuò)展的對(duì)象為對(duì)象新增屬性張無(wú)忌在非嚴(yán)格模式下為不可擴(kuò)展的對(duì)象添加新屬性,結(jié)果是靜默失敗。 概述 嚴(yán)格模式是什么 嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式不是一個(gè)子集:它在語(yǔ)義上與正常代碼有著明顯的差異。不支持嚴(yán)格模式的瀏覽器與支持嚴(yán)格模式的瀏覽器行為上也不一樣,所以不要在未經(jīng)嚴(yán)格模式特性測(cè)試情況下使用嚴(yán)格模式。嚴(yán)格模式可以與非嚴(yán)...

    bang590 評(píng)論0 收藏0
  • 那些年,前端學(xué)習(xí)之路的疑難雜癥(一):嚴(yán)格模式與非嚴(yán)格模式

    摘要:反之亦然非嚴(yán)格合并嚴(yán)格看起來(lái)是非嚴(yán)格的。在普通的里面給一個(gè)拼寫(xiě)錯(cuò)誤的變量名賦值會(huì)使全局對(duì)象新增一個(gè)屬性并繼續(xù)工作盡管后面可能出錯(cuò)在現(xiàn)在的中有可能。第三嚴(yán)格模式禁止刪除聲明變量。 文章整理自MSDN:https://developer.mozilla.org... 1.逐步使用嚴(yán)格模式 ECMAScript 5的嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式不是一個(gè)...

    zombieda 評(píng)論0 收藏0
  • 1.你不知道的JavaScript-嚴(yán)格模式

    摘要:針對(duì)單個(gè)函數(shù)將放在函數(shù)體的第一行,則整個(gè)函數(shù)以嚴(yán)格模式運(yùn)行。嚴(yán)格模式禁止這種用法,全局變量必須顯式聲明。嚴(yán)格模式下,這屬于語(yǔ)法錯(cuò)誤。嚴(yán)格模式禁止這種表示法,整數(shù)第一位為,將報(bào)錯(cuò)。也就是說(shuō),不允許在非函數(shù)的代碼塊內(nèi)聲明函數(shù)。 本文轉(zhuǎn)自【阮一峰博客】:http://www.ruanyifeng.com/blo... 一、概述 除了正常運(yùn)行模式,ECMAscript 5添加了第二種運(yùn)行模式:...

    FuisonDesign 評(píng)論0 收藏0
  • javascript嚴(yán)格模式

    摘要:概述的嚴(yán)格模式是中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式在語(yǔ)義上與正常的有一些不同。首先,嚴(yán)格模式會(huì)將陷阱直接變成明顯的錯(cuò)誤。嚴(yán)格模式禁止刪除聲明變量。 概述 ECMAScript 5的嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式不是一個(gè)子集:它在語(yǔ)義上與正常代碼有著明顯的差異。不支持嚴(yán)格模式的瀏覽器與支持嚴(yán)格模式的瀏覽器行為上也不一樣, 所以不要在未經(jīng)嚴(yán)格模式特...

    Chao 評(píng)論0 收藏0
  • 談?wù)?em>JavaScript中嚴(yán)格模式你應(yīng)該遵守的那些事

    嚴(yán)格模式 首先來(lái)了解一下嚴(yán)格模式是什么?嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式,不是一個(gè)子集:它在語(yǔ)義上與正常代碼有明顯的差異,不支持嚴(yán)格模式的瀏覽器與支持嚴(yán)格模式的瀏覽器行為上也不一樣,所以不要在未經(jīng)嚴(yán)格模式特性測(cè)試情況下使用嚴(yán)格模式,嚴(yán)格模式可以與非嚴(yán)格模式共存,所以腳本可以逐漸的選擇性加入嚴(yán)格模式 嚴(yán)格模式的目的 首先,嚴(yán)格模式會(huì)將JavaScript陷阱直接變成明顯的錯(cuò)...

    MingjunYang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<