亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript面向?qū)ο笾械膰?yán)格模式

bang590 / 1738人閱讀

摘要:開啟嚴(yán)格模式設(shè)置對象是一個不可擴(kuò)展的對象為對象新增屬性張無忌在非嚴(yán)格模式下為不可擴(kuò)展的對象添加新屬性,結(jié)果是靜默失敗。

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

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

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

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

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

如果想要在JavaScript中開啟嚴(yán)格模式,首先要在所有代碼的最前面,定義一個不會賦給任何變量的字符串。
如果之前的JavaScript代碼是非嚴(yán)格模式的話,建議不要盲目的為這段代碼開啟嚴(yán)格模式,這樣可能會出現(xiàn)問題。在初學(xué)時期建議按一個個的函數(shù)去開啟嚴(yán)格模式。

// 開啟嚴(yán)格模式 - 作用于全局作用域
// "use strict"
// 定義一個變量 - 不使用var關(guān)鍵字
a = 100;
//在非嚴(yán)格模式中可以不使用var關(guān)鍵字,但是嚴(yán)格模式不可以,不然就會報錯。
console.log(a);

function fn(){
    // 開啟嚴(yán)格模式 - 作用于函數(shù)作用域
    "use strict"
    v = 200;
    console.log(v);
}
fn();
函數(shù)開啟嚴(yán)格模式

嚴(yán)格模式也可以為一個指定的函數(shù)開啟。

function fn(){
    "use strict"
    //在函數(shù)體中開啟嚴(yán)格模式,但是函數(shù)意外依舊是非嚴(yán)格模式
    v = 200;
    consolo.log(v);
}
fn();
變量 禁止意外創(chuàng)建變量

在嚴(yán)格模式的情況下,是不允許創(chuàng)建全局變量的。

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

v = 100;//不使用var關(guān)鍵字
console.log(v);

function fn(){
    // 在非嚴(yán)格模式:在函數(shù)作用域中定義變量 - 不使用var關(guān)鍵字 -> 自動將其提升為全局變量
    w = 200;
    console.log(w);
}
fn();
console.log(w);
靜默失敗轉(zhuǎn)為異常

所謂的靜默失敗就是即不報錯也沒有任何效果。例如改變常量的值。在嚴(yán)格模式下,靜默失敗會轉(zhuǎn)換成拋出異常。

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

const v = 3.14;// 定義常量
v = 1.14;// 重新賦值。嚴(yán)格模式下結(jié)果報錯。

console.log(v);
禁用delete關(guān)鍵字

在嚴(yán)格模式下,不能使用變量使用delete運算符,但是這種情況只針對變量,對數(shù)組和對象屬性沒有限制。

// 開啟嚴(yán)格模式
"use strict";
// 嚴(yán)格模式下禁用delete關(guān)鍵字 -> 針對刪除變量,而不是數(shù)組元素和對象屬性

// var v = 100;// 定義一個全局變量
// console.log(v);
//
// delete v;// 刪除全局變量v
// console.log(v);// undefined
定義數(shù)組
// var arr = [1,2,3,4,5];
// delete arr[0];
// console.log(arr);
定義對象
var obj = {
    name : "張無忌"
}
delete obj.name;
console.log(obj.name);
對變量名的限制

在嚴(yán)格模式下,JavaScript對變量名也有限制。特別不能使用如下內(nèi)容作為變量:

上述內(nèi)容都是保留字,在ECMAScript的下一個版本中可能會用到他們。
但是在嚴(yán)格模式下,使用上述標(biāo)示符作為變量名會導(dǎo)致語法錯誤。

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

var static = 100;
console.log(static);//結(jié)果-報錯
對象 不可刪除的屬性

在嚴(yán)格模式下,不能使用delete運算符刪除不可刪除的屬性。

 開啟嚴(yán)格模式
"use strict";
//在非嚴(yán)格模式下使用delete刪除不可刪除的屬性
 delete Object.prototype;//結(jié)果會靜默失敗
 console.log(Object.prototype);

//在嚴(yán)格模式下使用delete刪除不可刪除額屬性,結(jié)果就是拋出異常。
delete Math.random;
console.log(Math.random);
// Math.random();
屬性名必須唯一

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

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

//在非嚴(yán)格模式下重名是允許的,最后一個重名的屬性就會覆蓋以上的屬性
//當(dāng)開啟嚴(yán)格模式,重名屬性就會被認(rèn)為是語法錯誤
var obj = {
    name : "張三",
    name : "李四"
}
console.log(obj.name);
只讀屬性的賦值

在嚴(yán)格模式下,不能為一個只讀的屬性進(jìn)行重新賦值。

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

var obj = {
    name : "張無忌"
}
// 用于判斷指定屬性是否為只讀屬性
var result = Object.getOwnPropertyDescriptor(obj, "name");
console.log(result);//在非嚴(yán)格模式下為只讀屬性重新賦值,結(jié)果會為靜默失敗。
// 定義對象obj的只讀屬性
Object.defineProperty(obj, "age", {
    value : 18
});
// 針對只讀屬性進(jìn)行修改操作
// obj.age = 80;
// console.log(obj.age);

delete obj.age;
console.log(obj.age);
不可擴(kuò)展的對象

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

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

var obj = {};
// 設(shè)置對象obj是一個不可擴(kuò)展的對象
Object.preventExtensions(obj);

// 為對象obj新增屬性
obj.name = "張無忌";
console.log(obj);
//在非嚴(yán)格模式下為不可擴(kuò)展的對象添加新屬性,結(jié)果是靜默失敗。
函數(shù) 參數(shù)名必須唯一

在嚴(yán)格模式下,要求命名函數(shù)的參數(shù)必須唯一。

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

function fn(a, a, b){
    console.log(a + a + b);
//在非嚴(yán)格模式下最后一個參數(shù)名就會之前的重名參數(shù),之前的參數(shù)仍然可以銅鼓arguments[i]來訪問。
//在開啟嚴(yán)格模式下,重名參數(shù)就會被認(rèn)為是語法錯誤。    
}
fn(1,2,3);
arguments的不同

在嚴(yán)格模式下,arguments對象的行為也有所不同。
1.在非嚴(yán)格模式下,修改命名參數(shù)的值也會反應(yīng)到arguments對象中。
2.在嚴(yán)格模式下,命名參數(shù)與arguments對象是完全獨立的。

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

function fn(value){
    var value = "張無忌";
    console.log(value);// 張無忌 -> 就近原則
    /*
        * 非嚴(yán)格模式下 - arguments對象獲取參數(shù)的值與形參有關(guān)的
          * 如果局部變量與形參名相同 - 根據(jù)就近原則進(jìn)行獲取
        * 嚴(yán)格模式下 - arguments對象獲取參數(shù)的值與形參無關(guān)的
     */
    console.log(arguments[0]);// 張無忌
}
fn("周芷若");
arguments.callee()

在嚴(yán)格模式下,不能使用arguments對象的callee()方法。

// 開啟嚴(yán)格模式
"use strict";
//在非嚴(yán)格模式下,arguments對象callee()方法,表示調(diào)用函數(shù)本身
// 在嚴(yán)格模式下,arguments對象無法調(diào)用callee()方法,結(jié)果拋出異常
function fn(){
    console.log(arguments.length);
    // return arguments.callee;
}
fn();
函數(shù)聲明的限制

在嚴(yán)格模式下,只能在全局域和函數(shù)域中聲明函數(shù)。

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

// 在全局作用域
function fn(){
    // 在函數(shù)作用域
    function n(){}
    //在非嚴(yán)格模式下,函數(shù)的定義在人格位置聲明函數(shù)都是可以的。
}
// 在嚴(yán)格模式下,函數(shù)的定義只能在全局作用域與函數(shù)作用域(不能在塊級作用域定義函數(shù)),語法錯誤
for (var i=0; i<10; i++) {
    // ECMAScript 6新增 - 存在著塊級作用域
    var v = 100;
    function f(){
        console.log("this is function");
    }
}
console.log(v);
f();
eval()函數(shù) 增加eval()作用域

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

// 開啟嚴(yán)格模式
"use strict";
//在非嚴(yán)格模式下eval()函數(shù)創(chuàng)建的變量在其他位置可以使用。
// 在嚴(yán)格模式下,增加eval作用域 - eval()函數(shù)定義的變量只能在當(dāng)前eval()函數(shù)內(nèi)部使用
eval("var v = 100;");
// 在全局作用域中調(diào)用變量 - 報錯
console.log(v);// 100
arguments對象 禁止讀寫

在嚴(yán)格模式下,禁止使用eval()和arguments作為標(biāo)示符,也不允許讀寫它們的值。
1.使用var聲明
2.賦值另一個值
3.嘗試修改包含的值
4.用作函數(shù)名
5.用作命名的函數(shù)的參數(shù)
6.在try...catch語句中用作例外明

// 開啟嚴(yán)格模式
"use strict";
//在嚴(yán)格模式下,以下所有嘗試都導(dǎo)致語法錯誤
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)格模式下使用函數(shù)的apply()或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指向全局對象

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/96987.html

相關(guān)文章

  • JavaScript面向對象中的嚴(yán)格模式個人分享

    摘要:嚴(yán)格模式嚴(yán)格模式的概念所謂嚴(yán)格模式就是對中的一種限制性更強(qiáng)的方式屬于代碼的一種強(qiáng)制規(guī)則來規(guī)范代碼的格式簡單的說就是必須按照嚴(yán)格模式的規(guī)則書寫代碼否則就會報錯嚴(yán)格模式修正了一些引擎難以優(yōu)化的錯誤同樣的代碼有些時候嚴(yán)格模式會比非嚴(yán)格模式下更加快 嚴(yán)格模式 嚴(yán)格模式的概念 所謂嚴(yán)格模式就是對JavaScript中的一種限制性更強(qiáng)的方式. 屬于代碼的一種強(qiáng)制規(guī)則,來規(guī)范代碼的格式簡單的說就是...

    lordharrd 評論0 收藏0
  • JavaScript面向對象 [ 嚴(yán)格模式 ]

    摘要:嚴(yán)格模式描述嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中嚴(yán)格模式是對代碼的一種限制方式嚴(yán)格模式可以將不明確顯示的錯誤轉(zhuǎn)變成明確顯示嚴(yán)格模式可以修正一些解釋器難以優(yōu)化的錯誤嚴(yán)格模式下的變量禁止意外創(chuàng)建變量沒有開啟嚴(yán)格模式時在調(diào)用該變量時, 嚴(yán)格模式 描述 嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中 嚴(yán)格模式是對JavaScript代碼的一種限制方式 嚴(yán)格模式可以將不明確顯...

    zsirfs 評論0 收藏0
  • JavaScript面向對象嚴(yán)格模式

    摘要:一嚴(yán)格模式概述嚴(yán)格模式是什么在中是種限制性更強(qiáng)變種方式,不是個子集,在語義上與正常代碼有明顯得差異嚴(yán)格模式和非嚴(yán)格模式可共存,可選擇性的加入嚴(yán)格模式嚴(yán)格模式的目的將把陷阱直接變?yōu)槊黠@錯誤修正一些引擎難以優(yōu)化錯誤,代碼有些時候嚴(yán)格模式會比非嚴(yán) JS(JavaScript)一.嚴(yán)格模式1.概述 嚴(yán)格模式是什么 在JS中是種限制性更強(qiáng)變種方式,不是個子集,在語義上與正常代碼有明顯得差異嚴(yán)格模...

    siberiawolf 評論0 收藏0
  • javascript 面向對象版塊之對象屬性

    摘要:上一篇面向?qū)ο蟀鎵K之理解對象下一篇面向?qū)ο蟀鎵K之定義多個對象屬性以及讀取屬性特性 這是 javascript 面向?qū)ο蟀鎵K的第二篇文章,主要講解的是對象的屬性,首先創(chuàng)建一個對象: var person = { name: Nicholas, age: 29, job: Software Engineer, sayName: function () { conso...

    lolomaco 評論0 收藏0
  • 前端_JavaScript_面向對象編程

    摘要:面向?qū)ο缶幊虒ο蟮脑椒ǚ殖蓛深愖陨淼姆椒o態(tài)方法和的實例方法。的靜態(tài)方法方法與,參數(shù)是對象,返回一個數(shù)組,數(shù)組的值是改對象自身的所有屬性名區(qū)別在于返回可枚舉的屬性,返回不可枚舉的屬性值。 面向?qū)ο缶幊?Objects對象的原生方法分成兩類:Object自身的方法(靜態(tài)方法)和Object的實例方法。注意Object是JavaScript的原生對象,所有的其他對象都是繼承自O(shè)bjec...

    Blackjun 評論0 收藏0

發(fā)表評論

0條評論

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