摘要:一嚴格模式概述嚴格模式是什么在中是種限制性更強變種方式,不是個子集,在語義上與正常代碼有明顯得差異嚴格模式和非嚴格模式可共存,可選擇性的加入嚴格模式嚴格模式的目的將把陷阱直接變為明顯錯誤修正一些引擎難以優化錯誤,代碼有些時候嚴格模式會比非嚴
JS(JavaScript)
一.嚴格模式
1.概述
嚴格模式是什么
在JS中是種限制性更強變種方式,不是個子集,在語義上與正常代碼有明顯得差異
嚴格模式和非嚴格模式可共存,可選擇性的加入嚴格模式
嚴格模式的目的
將JS把陷阱直接變為明顯錯誤
修正一些引擎難以優化錯誤,代碼有些時候嚴格模式會比非嚴格模式更快
禁用了一些以被定義的語法
2.開啟嚴格模式
//開啟嚴格模式-作用于全局作用域 // "use strict " //定義個變量-不使用var關鍵字 a = 100; console.log(a); function fn() { // "use strict" //開啟嚴格模式-作用于函數作用域 v = 200; console.log(v) } fn();
3.變量
禁止意外創建變量
在非嚴格模式下在函數作用域中定義變量,不使用var關鍵字-自動為全局變量
在嚴格模式下在函數作用域中定義變量,會報錯
會顯示ReferenceError
// 開啟嚴格模式 // "use strict"; v = 100; console.log(v); function fn() { //在非嚴格模式:在函數作用域中定義變量 //不使用var關鍵字-自動為全局變量 q = 200; console.log(q); } fn(); console.log(q);
靜默失敗轉為異常
在非嚴格模式下靜默失敗
在嚴格模式下會顯示TypeError錯誤
//開啟嚴格模式 "use strict"; const v = 3.14;//定義變量 v = 1.14;//重新賦值 console.log(v);
禁用delete關鍵字
在非嚴格模式下使用delete,結果為靜默失敗
在嚴格模式下使用delete,結果會ReferenceError錯誤
//開啟嚴格模式 "use strict"; //嚴格模式下禁用delete關鍵字-針對刪除變量,而不是數組元素和對象屬性 var v = 100;//定義個全局變量 console.log(v); delete v;//刪除全局變量v console.log(v);//undefined var arr = [1,2,3,4,5]; delete arr[0]; console.log(arr); var obj = { name : "犬夜叉"
對變量名的限制
在非嚴格模式,定義個變量時,使用保留名,靜默失敗
在嚴格模式定義個變量時,使用保留名會語法報錯
//開啟嚴格模式 "use strict"; var static = 100;//定義個變量 console.log(static);
4.對象
不可刪除的屬性
非嚴格模式使用delete不可刪除屬性,結果靜默失敗
嚴格模式使用delete不可刪除屬性結果會出現異常TypeError錯誤
"use strict" //開啟嚴格模式 // delete Object.prototype; //使用delete 刪除Object對象原型屬性 // console.log(Object.prototype); //在調用Object對象原型屬性 delete Math.random; console.log(Math.random); // Math.random();
屬性名必須唯一
在非嚴格模式重名是允許的,重名屬性決定其屬性值
在嚴格模式重名會被認為語法錯誤
"use strict"; var obj = { name : "犬夜叉", name : "戈薇" } console.log(obj.name); 調用個對象屬性
只讀屬性的賦值
在非嚴格模式下只讀屬性重新賦值,結果會靜默失敗
在嚴格模式下只讀屬性重新賦值,結果會顯示TypeError異常
//判斷指定屬性是否是只讀屬性 var obj = { name : "犬夜叉" } // var result = Object.getOwnPropertyDescriptor(obj,"name"); console.log(result); Object.defineProperty(obj,"age",{ //定義對象obj只讀屬性 value : 16 }); //只讀屬性更改 // obj.age = 80; // console.log(obj.age);
不可擴展的對象
在非嚴格模式下不可擴展對象添加新屬性,結果會靜默失敗
在嚴格模式下不可擴展對象添加新屬性,結果會顯示TypeError異常
// "use strict"; var obj = {}; Object.preventExtensions(obj); //設置對obj是個不可擴展對象 obj.name = "犬夜叉"; //對象obj新增屬性 console.log(obj);
5.函數
參數名必須唯一
在非嚴格模式下最后個重名參數名會覆蓋之前重名參數,參數仍然可以通過arguments[i]來訪問
在嚴格模式下重名參數認為語法顯示出錯
// "use strict"; //開啟嚴格模式 function fn(a, a, b) { //定一個函數 console.log(a + a +b); } fn(1,2,3);
arguments的不同
在非嚴格模式下修改參數值也會反應到arguments對象中
在嚴格模式下命名參數與arguments對象是完全獨立
// "use strict"; //開啟嚴格模式 function fn(value) { //定義哥函數 var value = "犬夜叉"; //定義個變量 console.log(arguments[0]);//犬夜叉 //調用變量 } fn("戈薇");
arguments對象的callee()方法
在非嚴格模式下使用arguments對象的callee()方法調用函數自身
在嚴格模式下使用arguments對象的callee()方法結果會顯示TypeError錯誤
// "use strict"; //開啟嚴格模式 function fn() { //定義哥函數 console.log(arguments.length); // return arguments.callee; } fn(); //調用函數
函數聲明的限制
在非嚴格模式下在任何位置聲明函數是允許的
在嚴格模式下在除全局和函數域聲明函數語法錯誤
"use strict"; //開啟嚴格模式 function fn(){ //定義個函數 function n(){} } for (var i=0; i<10; i++) { var v = 100; function f(){ console.log("you my function"); } } console.log(v); f();
6.eval()
-增加eval作用域
在非嚴格模式下使用eval函數建立的變量可在其它位置使用
在嚴格模式下使用eval函數建立的變量只能在eval函數內使用
"use strict"; //開啟嚴格模式 eval("var v = 100,"); //在嚴格模式,增加eval作用域-eval()函數定義變量只能在eval()函數中使用 console.log(v);//100 //在全局作用域中調用變量-報錯
7.arguments對象
禁止讀寫
在非嚴格模式下使用eval或arguments為標識符時會靜默失敗
在嚴格模式下使用eval或arguments為標識符時會顯示SyntaxError錯誤
// "use strict"; //開啟嚴格模式 evel = 16; arguments++; ++evel; 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 16;");
8.this關鍵字
抑制this
在非嚴格模式下使用函數apply()和call()或null和undefined會被轉換為全家對象
在嚴格模式下使用函數的this值最終是指定值,但會顯示出錯
// "use srict"; var v = 100; //定個全局變量 function fn() { // 定義個函數 console.log(this.v); } var obj ={ v : 200 } fn.call(obj);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96974.html
摘要:上一篇面向對象版塊之理解對象下一篇面向對象版塊之定義多個對象屬性以及讀取屬性特性 這是 javascript 面向對象版塊的第二篇文章,主要講解的是對象的屬性,首先創建一個對象: var person = { name: Nicholas, age: 29, job: Software Engineer, sayName: function () { conso...
摘要:嚴格模式描述嚴格模式可以分別作用在全局作用域中和函數作用域中嚴格模式是對代碼的一種限制方式嚴格模式可以將不明確顯示的錯誤轉變成明確顯示嚴格模式可以修正一些解釋器難以優化的錯誤嚴格模式下的變量禁止意外創建變量沒有開啟嚴格模式時在調用該變量時, 嚴格模式 描述 嚴格模式可以分別作用在全局作用域中和函數作用域中 嚴格模式是對JavaScript代碼的一種限制方式 嚴格模式可以將不明確顯...
摘要:相信很多人都看過設計模式與開發實踐這本書,每個人都有自己的體會感受,作為前端年開發經驗的程序猿,用我自認為還可以的實踐經驗來與大家談談這本書。這章是前言,后面陸續會講解每個設計模式。 相信很多人都看過《javascript設計模式與開發實踐》這本書,每個人都有自己的體會感受,作為前端3年開發經驗的程序猿,用我自認為還可以的實踐經驗來與大家談談這本書。這章是前言,后面陸續會講解每個設計模...
摘要:命令執行時,構造函數內部的,就代表了新生成的實例對象,表示實例對象有一個屬性,值是。因此,應該非常小心,避免不使用命令直接調用構造函數。命令返回這個對象,而不是對象。JavaScript 面向對象編程的基礎知識篇 1 。 1. 概述 面向對象編程(Object Oriented Programming,縮寫為 OOP)是目前主流的編程范式。 那么,對象(object)到底是什么? 對象是單...
摘要:三的屬性屬性表示傳入函數的實際參數數量,而不是函數聲明時的形參數量。你好你好你好你好你好你好擴展運算符你好你好五嚴格模式嚴格模式和非嚴格模式中,的表現顯示不相同。而在嚴格模式中,實參和的值不會共享。 本文共 635 字,讀完只需 3 分鐘 概述 JavaScript中的函數與其他面向對象語言有幾個不同的地方。 沒有函數重載 有一個表示實參列表的類數組對象 arguments 一、...
閱讀 2761·2021-09-24 10:34
閱讀 1862·2021-09-22 10:02
閱讀 2252·2021-09-09 09:33
閱讀 1458·2021-08-13 15:02
閱讀 3270·2020-12-03 17:10
閱讀 1180·2019-08-30 15:44
閱讀 2144·2019-08-30 12:58
閱讀 3229·2019-08-26 13:40