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

資訊專欄INFORMATION COLUMN

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

lordharrd / 3266人閱讀

摘要:嚴(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ī)范代碼的格式簡單的說就是必須按照嚴(yán)格模式的規(guī)則書寫代碼否則就會報錯

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

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

就是在所有代碼之前,定義一個不會賦給任何變量的字符串

示例代碼:

// 開啟嚴(yán)格模式 - 作用于全局作用域
  "use strict";
// 定義一個變量 - 不使用var關(guān)鍵字

b = "皮卡丘";
console.log(b);

控制臺示例圖:

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

沒有開啟嚴(yán)格模式時

在調(diào)用該變量時,不會報錯

解釋器會自動補(bǔ)全 var關(guān)鍵字

開啟嚴(yán)格模式時

在調(diào)用該變量時,會報錯

示例代碼:

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

var v = "舒克,貝特";
console.log(v);


function fn() {
    /* 在非嚴(yán)格模式:
        * 在函數(shù)作用域中定義變量 - 不適用var關(guān)鍵字時JavaScript就會自動將其提升為全局變量
     */
    w = "貓和老鼠";
    console.log(w);
}
fn();
console.log(w);

控制臺效果對比圖:

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

靜默表示既不報錯也不顯示任何效果

在嚴(yán)格模式下,靜默失敗會轉(zhuǎn)為報錯

示例代碼:

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

const v = 12.19;// 定義常量
v = 1993;// 重新賦值

console.log(v);

控制臺效果圖:

禁用delete關(guān)鍵字

注意: 注意: 嚴(yán)格模式下禁用delete關(guān)鍵字 - 是針對刪除變量,而不是數(shù)組元素的對象屬性的

在非嚴(yán)格模式下,對變量使用delete 會靜默失敗

在嚴(yán)格模式下,對變量使用delete 會報錯

示例代碼:

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

// 注意: 嚴(yán)格模式下禁用delete關(guān)鍵字 - 是針對刪除變量,而不是數(shù)組元素的對象屬性的

// 定義一個全局變量
var v = "皮卡丘";
console.log(v);

delete  v;//刪除全局變量v
console.log(v);

//定義一個數(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)格模式下不允許把保留字當(dāng)變量名稱 - 因?yàn)樵贓S6中保留字會變成關(guān)鍵字

示例代碼:

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

/*
    注意: 嚴(yán)格模式下不允許把保留字當(dāng)變量名稱
      * 因?yàn)樵贓S6中保留字會變成關(guān)鍵字
 */
var static = "一花一世界";
console.log(static);

控制臺效果對比圖:

對象 不可刪除的屬性

在非嚴(yán)格模式下,使用delete去刪除不可刪除的屬性時,會靜默失敗

示例代碼:

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

/* 使用delete 刪除Object對象的原型屬性 */
delete Object.prototype;
/* 在調(diào)用Object對象的原型屬性 */
console.log(Object.prototype);

控制臺效果對比圖:

屬性名必須唯一

當(dāng)開啟嚴(yán)格模式時 - 對象具有相同名稱的屬性時,編輯器報錯(不是運(yùn)行時報錯)

當(dāng)非嚴(yán)格模式時 - 對象具有相同名稱的屬性時,后面的會覆蓋前面的屬性名

示例代碼:

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

var obj = {
    /*
        當(dāng)開啟嚴(yán)格模式時 - 對象具有相同名稱的屬性時,編輯器報錯(不是運(yùn)行時報錯)
        當(dāng)非嚴(yán)格模式時 - 對象具有相同名稱的屬性時,后面的會覆蓋前面的屬性名
     */
    name : "皮卡丘",
    name : "亞奇洛貝"
};
console.log(obj.name);

控制臺效果對比圖:

只讀屬性的賦值

在非嚴(yán)格模式下,對只讀屬性進(jìn)行從新賦值,會靜默失敗

在嚴(yán)格模式下,對只讀屬性進(jìn)行重新賦值,會報錯

示例代碼:

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

/* 定義一個對象 */
var obj = {
    name : "皮卡丘"
};
/* 獲取指定屬性的屬性描述符 - 將屬性改為只讀屬性 */
var result = Object.getOwnPropertyDescriptor(obj,"name");
console.log(result);
// 定義對象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)格模式下,對不可擴(kuò)展的對象添加新屬性,會報錯

示例代碼:

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

/* 定義一個空對象 */
var obj = {};
// 設(shè)置對象obj是一個不可擴(kuò)展的對象
Object.preventExtensions(obj);
// 為對象obj新增屬性
obj.name = "皮卡丘";
/* 調(diào)用對象 */
console.log(obj);

控制臺效果對比圖:

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

在非嚴(yán)格模式下,參數(shù)名允許重復(fù),后面匹配的參數(shù)會覆蓋之前匹配的參數(shù)

在嚴(yán)格模式下,參數(shù)名重復(fù)時,編輯器會提示報錯,運(yùn)行時也會報錯

示例代碼:

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

/* 定義一個函數(shù) */
function fn(a,a,b) {
    console.log(a + a + b);
}
/* 調(diào)用函數(shù)并傳遞參數(shù) */
fn(1,2,3);

控制臺效果對比圖:

arguments的不同

嚴(yán)格模式下 - arguments對象獲取參數(shù)的值與形參有關(guān)的

如果局部變量與形參名相同 - 就根據(jù)就近原則進(jìn)行獲取

嚴(yán)格模式下 - arguments對象獲取參數(shù)的值與形參無關(guān)的

示例代碼:

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

function fn(value) {
    var value = "皮卡丘";
    console.log(value);// 調(diào)用結(jié)果為 皮卡丘 - 就近原則
    /*
        * 嚴(yán)格模式下 - arguments對象獲取參數(shù)的值與形參有關(guān)的
          * 如果局部變量與形參名相同 - 就根據(jù)就近原則進(jìn)行獲取
        * 嚴(yán)格模式下 - arguments對象獲取參數(shù)的值與形參無關(guān)的
     */
    console.log(arguments[0]);// 調(diào)用結(jié)果為 皮卡丘 , 嚴(yán)格模式下調(diào)用結(jié)果為 皮皮蝦
}
fn("皮皮蝦");

控制臺效果對比圖:

arguments對象的callee( )方法

在非嚴(yán)格模式下,callee()方法表示當(dāng)前調(diào)用的函數(shù)

在嚴(yán)格模式下,arguments對象將無法調(diào)用callee()方法,會報錯

示例代碼:

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

/* 定義一個函數(shù) */
function fn() {
    console.log(arguments.length);
    /* 將callee()方法返回 */
    return arguments.callee;
}
fn();

控制臺效果對比圖:

函數(shù)聲明的限制

在嚴(yán)格模式下, 函數(shù)的定義只能在全局作用域與函數(shù)作用域(不能再塊級作用域定義函數(shù))

在非嚴(yán)格模式下,函數(shù)可以在任何作用域下進(jìn)行定義

示例代碼:

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

// 在全局作用域
function fn() {
    // 在函數(shù)作用域
    function n() {}
}
// 在嚴(yán)格模式下, 函數(shù)的定義只能在全局作用域與函數(shù)作用域(不能再塊級作用域定義函數(shù))
for (var i=0; i<10; i++){
    //ECMAScript 6新增 - 存在著塊級作用域
    var v = 100;
    function f() {
        console.log("這是一個皮卡丘");
    }
}
console.log(v);
f();

控制臺對比效果圖:

eval()函數(shù) 增加eval()作用域

在非嚴(yán)格模式下,eval()函數(shù)創(chuàng)建的變量可以在其他位置進(jìn)行調(diào)用

在嚴(yán)格模式下,eval()函數(shù)創(chuàng)建的變量只能在當(dāng)前eval()函數(shù)中使用,其他位置調(diào)用會報錯

示例代碼:

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

// 在嚴(yán)格模式下,增加eval作用域 - eval()函數(shù)定義的變量只能在當(dāng)前eval()函數(shù)中使用
eval("var v = "一花一世界";");
// 在全局作用域中調(diào)用變量 - 則會報錯
console.log(v);// 非嚴(yán)格模式下調(diào)用結(jié)果為 一花一世界

控制臺效果對比圖:

arguments對象 禁止讀寫

在非嚴(yán)格模式下,使用 eval 或 arguments 做為標(biāo)識符(變量名、函數(shù)名、對象名)時,會靜默失敗

在嚴(yán)格模式下,使用 eval 或 arguments 做為標(biāo)識符(變量名、函數(shù)名、對象名)時,會報錯

示例代碼:

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

/* 使用 eval 或 arguments 做為標(biā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()方法來調(diào)用函數(shù)時,使用null或undefined來代替this的指向?qū)ο髸r,this會指向全局對象

在嚴(yán)格模式下,在函數(shù)使用apply()方法或call()方法來調(diào)用函數(shù)時,使用null或undefined來代替this的指向?qū)ο髸r,會報錯

示例代碼:

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


/* 定義全局變量 */
var v = 100;

/* 定義函數(shù) */
function fn() {
    console.log(this.v);
}


/* 使用appl()方法或call()方法來調(diào)用函數(shù) */
fn.call(obj);// this 指向全局對象

控制臺效果對比圖:

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

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

相關(guān)文章

  • JavaScript之a(chǎn)rguments

    摘要:三的屬性屬性表示傳入函數(shù)的實(shí)際參數(shù)數(shù)量,而不是函數(shù)聲明時的形參數(shù)量。你好你好你好你好你好你好擴(kuò)展運(yùn)算符你好你好五嚴(yán)格模式嚴(yán)格模式和非嚴(yán)格模式中,的表現(xiàn)顯示不相同。而在嚴(yán)格模式中,實(shí)參和的值不會共享。 本文共 635 字,讀完只需 3 分鐘 概述 JavaScript中的函數(shù)與其他面向?qū)ο笳Z言有幾個不同的地方。 沒有函數(shù)重載 有一個表示實(shí)參列表的類數(shù)組對象 arguments 一、...

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

    摘要:開啟嚴(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)...

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

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

    Blackjun 評論0 收藏0
  • JavaScript之“use strict”

    摘要:在嚴(yán)格模式中,當(dāng)運(yùn)算符后跟隨非法的標(biāo)識符比如變量函數(shù)函數(shù)參數(shù)時,將會拋出一個語法錯誤異常在非嚴(yán)格模式中,這種表達(dá)式什么也沒做,并返回。 JavaScript之use strict use strict是ECMAScript 5引入的一條指令。指令不是語句(但非常接近于語句)。usestrict指令和普通的語句之間有兩個重要的區(qū)別: 它不包含任何語言的關(guān)鍵字,指令僅僅是一個包含一個特殊...

    econi 評論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

發(fā)表評論

0條評論

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