摘要:嚴(yán)格模式嚴(yán)格模式的概念所謂嚴(yán)格模式就是對(duì)中的一種限制性更強(qiáng)的方式屬于代碼的一種強(qiáng)制規(guī)則來(lái)規(guī)范代碼的格式簡(jiǎn)單的說(shuō)就是必須按照嚴(yán)格模式的規(guī)則書寫代碼否則就會(huì)報(bào)錯(cuò)嚴(yán)格模式修正了一些引擎難以優(yōu)化的錯(cuò)誤同樣的代碼有些時(shí)候嚴(yán)格模式會(huì)比非嚴(yán)格模式下更加快
嚴(yán)格模式 嚴(yán)格模式的概念
所謂嚴(yán)格模式就是對(duì)JavaScript中的一種限制性更強(qiáng)的方式.
屬于代碼的一種強(qiáng)制規(guī)則,來(lái)規(guī)范代碼的格式簡(jiǎn)單的說(shuō)就是必須按照嚴(yán)格模式的規(guī)則書寫代碼否則就會(huì)報(bào)錯(cuò)
嚴(yán)格模式修正了一些引擎難以優(yōu)化的錯(cuò)誤: 同樣的代碼有些時(shí)候嚴(yán)格模式會(huì)比非嚴(yán)格模式下更加快
開(kāi)啟嚴(yán)格模式 全局開(kāi)啟嚴(yán)格模式就是在所有代碼之前,定義一個(gè)不會(huì)賦給任何變量的字符串
示例代碼:
// 開(kāi)啟嚴(yán)格模式 - 作用于全局作用域 "use strict"; // 定義一個(gè)變量 - 不使用var關(guān)鍵字 b = "皮卡丘"; console.log(b);
控制臺(tái)示例圖:
沒(méi)有開(kāi)啟嚴(yán)格模式時(shí)
在調(diào)用該變量時(shí),不會(huì)報(bào)錯(cuò)
解釋器會(huì)自動(dòng)補(bǔ)全 var關(guān)鍵字
開(kāi)啟嚴(yán)格模式時(shí)
在調(diào)用該變量時(shí),會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; var v = "舒克,貝特"; console.log(v); function fn() { /* 在非嚴(yán)格模式: * 在函數(shù)作用域中定義變量 - 不適用var關(guān)鍵字時(shí)JavaScript就會(huì)自動(dòng)將其提升為全局變量 */ w = "貓和老鼠"; console.log(w); } fn(); console.log(w);
控制臺(tái)效果對(duì)比圖:
靜默表示既不報(bào)錯(cuò)也不顯示任何效果
在嚴(yán)格模式下,靜默失敗會(huì)轉(zhuǎn)為報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; const v = 12.19;// 定義常量 v = 1993;// 重新賦值 console.log(v);
控制臺(tái)效果圖:
注意: 注意: 嚴(yán)格模式下禁用delete關(guān)鍵字 - 是針對(duì)刪除變量,而不是數(shù)組元素的對(duì)象屬性的
在非嚴(yán)格模式下,對(duì)變量使用delete 會(huì)靜默失敗
在嚴(yán)格模式下,對(duì)變量使用delete 會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; // 注意: 嚴(yán)格模式下禁用delete關(guān)鍵字 - 是針對(duì)刪除變量,而不是數(shù)組元素的對(duì)象屬性的 // 定義一個(gè)全局變量 var v = "皮卡丘"; console.log(v); delete v;//刪除全局變量v console.log(v); //定義一個(gè)數(shù)組 var arr = [1,2,3,4,5]; delete arr[0]; console.log(arr); // 定義一個(gè)對(duì)象 var obj = { name : "花花世界" }; delete obj.name; console.log(obj.name);
控制臺(tái)效果對(duì)比:
注意: 嚴(yán)格模式下不允許把保留字當(dāng)變量名稱 - 因?yàn)樵贓S6中保留字會(huì)變成關(guān)鍵字
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; /* 注意: 嚴(yán)格模式下不允許把保留字當(dāng)變量名稱 * 因?yàn)樵贓S6中保留字會(huì)變成關(guān)鍵字 */ var static = "一花一世界"; console.log(static);
控制臺(tái)效果對(duì)比圖:
在非嚴(yán)格模式下,使用delete去刪除不可刪除的屬性時(shí),會(huì)靜默失敗
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; /* 使用delete 刪除Object對(duì)象的原型屬性 */ delete Object.prototype; /* 在調(diào)用Object對(duì)象的原型屬性 */ console.log(Object.prototype);
控制臺(tái)效果對(duì)比圖:
當(dāng)開(kāi)啟嚴(yán)格模式時(shí) - 對(duì)象具有相同名稱的屬性時(shí),編輯器報(bào)錯(cuò)(不是運(yùn)行時(shí)報(bào)錯(cuò))
當(dāng)非嚴(yán)格模式時(shí) - 對(duì)象具有相同名稱的屬性時(shí),后面的會(huì)覆蓋前面的屬性名
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; var obj = { /* 當(dāng)開(kāi)啟嚴(yán)格模式時(shí) - 對(duì)象具有相同名稱的屬性時(shí),編輯器報(bào)錯(cuò)(不是運(yùn)行時(shí)報(bào)錯(cuò)) 當(dāng)非嚴(yán)格模式時(shí) - 對(duì)象具有相同名稱的屬性時(shí),后面的會(huì)覆蓋前面的屬性名 */ name : "皮卡丘", name : "亞奇洛貝" }; console.log(obj.name);
控制臺(tái)效果對(duì)比圖:
在非嚴(yán)格模式下,對(duì)只讀屬性進(jìn)行從新賦值,會(huì)靜默失敗
在嚴(yán)格模式下,對(duì)只讀屬性進(jìn)行重新賦值,會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; /* 定義一個(gè)對(duì)象 */ var obj = { name : "皮卡丘" }; /* 獲取指定屬性的屬性描述符 - 將屬性改為只讀屬性 */ var result = Object.getOwnPropertyDescriptor(obj,"name"); console.log(result); // 定義對(duì)象obj的只讀屬性 Object.defineProperty(obj,"age",{ value : 18 }); // 針對(duì)只讀屬性進(jìn)行修改操作 // obj.age = 80; // console.log(obj.age); delete obj.age; console.log(obj.age);
控制臺(tái)效果對(duì)比圖:
在非嚴(yán)格模式下,對(duì)不可擴(kuò)展的對(duì)象添加新屬性,會(huì)靜默失敗
在嚴(yán)格模式下,對(duì)不可擴(kuò)展的對(duì)象添加新屬性,會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; /* 定義一個(gè)空對(duì)象 */ var obj = {}; // 設(shè)置對(duì)象obj是一個(gè)不可擴(kuò)展的對(duì)象 Object.preventExtensions(obj); // 為對(duì)象obj新增屬性 obj.name = "皮卡丘"; /* 調(diào)用對(duì)象 */ console.log(obj);
控制臺(tái)效果對(duì)比圖:
在非嚴(yán)格模式下,參數(shù)名允許重復(fù),后面匹配的參數(shù)會(huì)覆蓋之前匹配的參數(shù)
在嚴(yán)格模式下,參數(shù)名重復(fù)時(shí),編輯器會(huì)提示報(bào)錯(cuò),運(yùn)行時(shí)也會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; /* 定義一個(gè)函數(shù) */ function fn(a,a,b) { console.log(a + a + b); } /* 調(diào)用函數(shù)并傳遞參數(shù) */ fn(1,2,3);
控制臺(tái)效果對(duì)比圖:
嚴(yán)格模式下 - arguments對(duì)象獲取參數(shù)的值與形參有關(guān)的
如果局部變量與形參名相同 - 就根據(jù)就近原則進(jìn)行獲取
嚴(yán)格模式下 - arguments對(duì)象獲取參數(shù)的值與形參無(wú)關(guān)的
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; function fn(value) { var value = "皮卡丘"; console.log(value);// 調(diào)用結(jié)果為 皮卡丘 - 就近原則 /* * 嚴(yán)格模式下 - arguments對(duì)象獲取參數(shù)的值與形參有關(guān)的 * 如果局部變量與形參名相同 - 就根據(jù)就近原則進(jìn)行獲取 * 嚴(yán)格模式下 - arguments對(duì)象獲取參數(shù)的值與形參無(wú)關(guān)的 */ console.log(arguments[0]);// 調(diào)用結(jié)果為 皮卡丘 , 嚴(yán)格模式下調(diào)用結(jié)果為 皮皮蝦 } fn("皮皮蝦");
控制臺(tái)效果對(duì)比圖:
在非嚴(yán)格模式下,callee()方法表示當(dāng)前調(diào)用的函數(shù)
在嚴(yán)格模式下,arguments對(duì)象將無(wú)法調(diào)用callee()方法,會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; /* 定義一個(gè)函數(shù) */ function fn() { console.log(arguments.length); /* 將callee()方法返回 */ return arguments.callee; } fn();
控制臺(tái)效果對(duì)比圖:
在嚴(yán)格模式下, 函數(shù)的定義只能在全局作用域與函數(shù)作用域(不能再塊級(jí)作用域定義函數(shù))
在非嚴(yán)格模式下,函數(shù)可以在任何作用域下進(jìn)行定義
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; // 在全局作用域 function fn() { // 在函數(shù)作用域 function n() {} } // 在嚴(yán)格模式下, 函數(shù)的定義只能在全局作用域與函數(shù)作用域(不能再塊級(jí)作用域定義函數(shù)) for (var i=0; i<10; i++){ //ECMAScript 6新增 - 存在著塊級(jí)作用域 var v = 100; function f() { console.log("這是一個(gè)皮卡丘"); } } console.log(v); f();
控制臺(tái)對(duì)比效果圖:
在非嚴(yán)格模式下,eval()函數(shù)創(chuàng)建的變量可以在其他位置進(jìn)行調(diào)用
在嚴(yán)格模式下,eval()函數(shù)創(chuàng)建的變量只能在當(dāng)前eval()函數(shù)中使用,其他位置調(diào)用會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; // 在嚴(yán)格模式下,增加eval作用域 - eval()函數(shù)定義的變量只能在當(dāng)前eval()函數(shù)中使用 eval("var v = "一花一世界";"); // 在全局作用域中調(diào)用變量 - 則會(huì)報(bào)錯(cuò) console.log(v);// 非嚴(yán)格模式下調(diào)用結(jié)果為 一花一世界
控制臺(tái)效果對(duì)比圖:
在非嚴(yán)格模式下,使用 eval 或 arguments 做為標(biāo)識(shí)符(變量名、函數(shù)名、對(duì)象名)時(shí),會(huì)靜默失敗
在嚴(yán)格模式下,使用 eval 或 arguments 做為標(biāo)識(shí)符(變量名、函數(shù)名、對(duì)象名)時(shí),會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; /* 使用 eval 或 arguments 做為標(biāo)識(shí)符 */ 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;");
代碼效果圖:
在非嚴(yán)格模式下,在函數(shù)使用apply()方法或call()方法來(lái)調(diào)用函數(shù)時(shí),使用null或undefined來(lái)代替this的指向?qū)ο髸r(shí),this會(huì)指向全局對(duì)象
在嚴(yán)格模式下,在函數(shù)使用apply()方法或call()方法來(lái)調(diào)用函數(shù)時(shí),使用null或undefined來(lái)代替this的指向?qū)ο髸r(shí),會(huì)報(bào)錯(cuò)
示例代碼:
// 開(kāi)啟嚴(yán)格模式 "use strict"; /* 定義全局變量 */ var v = 100; /* 定義函數(shù) */ function fn() { console.log(this.v); } /* 使用appl()方法或call()方法來(lái)調(diào)用函數(shù) */ fn.call(obj);// this 指向全局對(duì)象
控制臺(tái)效果對(duì)比圖:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/96975.html
摘要:三的屬性屬性表示傳入函數(shù)的實(shí)際參數(shù)數(shù)量,而不是函數(shù)聲明時(shí)的形參數(shù)量。你好你好你好你好你好你好擴(kuò)展運(yùn)算符你好你好五嚴(yán)格模式嚴(yán)格模式和非嚴(yán)格模式中,的表現(xiàn)顯示不相同。而在嚴(yán)格模式中,實(shí)參和的值不會(huì)共享。 本文共 635 字,讀完只需 3 分鐘 概述 JavaScript中的函數(shù)與其他面向?qū)ο笳Z(yǔ)言有幾個(gè)不同的地方。 沒(méi)有函數(shù)重載 有一個(gè)表示實(shí)參列表的類數(shù)組對(duì)象 arguments 一、...
摘要:開(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)...
摘要:面向?qū)ο缶幊虒?duì)象的原生方法分成兩類自身的方法靜態(tài)方法和的實(shí)例方法。的靜態(tài)方法方法與,參數(shù)是對(duì)象,返回一個(gè)數(shù)組,數(shù)組的值是改對(duì)象自身的所有屬性名區(qū)別在于返回可枚舉的屬性,返回不可枚舉的屬性值。 面向?qū)ο缶幊?Objects對(duì)象的原生方法分成兩類:Object自身的方法(靜態(tài)方法)和Object的實(shí)例方法。注意Object是JavaScript的原生對(duì)象,所有的其他對(duì)象都是繼承自O(shè)bjec...
摘要:在嚴(yán)格模式中,當(dāng)運(yùn)算符后跟隨非法的標(biāo)識(shí)符比如變量函數(shù)函數(shù)參數(shù)時(shí),將會(huì)拋出一個(gè)語(yǔ)法錯(cuò)誤異常在非嚴(yán)格模式中,這種表達(dá)式什么也沒(méi)做,并返回。 JavaScript之use strict use strict是ECMAScript 5引入的一條指令。指令不是語(yǔ)句(但非常接近于語(yǔ)句)。usestrict指令和普通的語(yǔ)句之間有兩個(gè)重要的區(qū)別: 它不包含任何語(yǔ)言的關(guān)鍵字,指令僅僅是一個(gè)包含一個(gè)特殊...
摘要:嚴(yán)格模式描述嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中嚴(yán)格模式是對(duì)代碼的一種限制方式嚴(yán)格模式可以將不明確顯示的錯(cuò)誤轉(zhuǎn)變成明確顯示嚴(yán)格模式可以修正一些解釋器難以優(yōu)化的錯(cuò)誤嚴(yán)格模式下的變量禁止意外創(chuàng)建變量沒(méi)有開(kāi)啟嚴(yán)格模式時(shí)在調(diào)用該變量時(shí), 嚴(yán)格模式 描述 嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中 嚴(yán)格模式是對(duì)JavaScript代碼的一種限制方式 嚴(yán)格模式可以將不明確顯...
閱讀 3359·2021-09-30 09:47
閱讀 2742·2021-08-18 10:22
閱讀 2527·2021-08-16 10:49
閱讀 2893·2019-08-30 15:53
閱讀 2738·2019-08-29 16:14
閱讀 3191·2019-08-28 18:18
閱讀 3237·2019-08-26 13:21
閱讀 794·2019-08-26 12:02