示例代碼:數組
// 開啓嚴格模式 - 做用於全局做用域 'use strict'; // 定義一個變量 - 不使用var關鍵字 b = '皮卡丘'; console.log(b);
控制檯示例圖:app
沒有開啓嚴格模式時編輯器
開啓嚴格模式時函數
示例代碼:優化
// 開啓嚴格模式 'use strict'; var v = '舒克,貝特'; console.log(v); function fn() { /* 在非嚴格模式: * 在函數做用域中定義變量 - 不適用var關鍵字時JavaScript就會自動將其提高爲全局變量 */ w = '貓和老鼠'; console.log(w); } fn(); console.log(w);
控制檯效果對比圖:this
示例代碼:spa
// 開啓嚴格模式 'use strict'; const v = 12.19;// 定義常量 v = 1993;// 從新賦值 console.log(v);
控制檯效果圖:prototype
示例代碼:code
// 開啓嚴格模式 'use strict'; // 注意: 嚴格模式下禁用delete關鍵字 - 是針對刪除變量,而不是數組元素的對象屬性的 // 定義一個全局變量 var v = '皮卡丘'; console.log(v); delete v;//刪除全局變量v console.log(v); //定義一個數組 var arr = [1,2,3,4,5]; delete arr[0]; console.log(arr); // 定義一個對象 var obj = { name : '花花世界' }; delete obj.name; console.log(obj.name);
控制檯效果對比:對象
示例代碼:
// 開啓嚴格模式 'use strict'; /* 注意: 嚴格模式下不容許把保留字當變量名稱 * 由於在ES6中保留字會變成關鍵字 */ var static = '一花一世界'; console.log(static);
控制檯效果對比圖:
示例代碼:
// 開啓嚴格模式 'use strict'; /* 使用delete 刪除Object對象的原型屬性 */ delete Object.prototype; /* 在調用Object對象的原型屬性 */ console.log(Object.prototype);
控制檯效果對比圖:
示例代碼:
// 開啓嚴格模式 'use strict'; var obj = { /* 當開啓嚴格模式時 - 對象具備相同名稱的屬性時,編輯器報錯(不是運行時報錯) 當非嚴格模式時 - 對象具備相同名稱的屬性時,後面的會覆蓋前面的屬性名 */ name : '皮卡丘', name : '亞奇洛貝' }; console.log(obj.name);
控制檯效果對比圖:
示例代碼:
// 開啓嚴格模式 'use strict'; /* 定義一個對象 */ var obj = { name : '皮卡丘' }; /* 獲取指定屬性的屬性描述符 - 將屬性改成只讀屬性 */ var result = Object.getOwnPropertyDescriptor(obj,'name'); console.log(result); // 定義對象obj的只讀屬性 Object.defineProperty(obj,'age',{ value : 18 }); // 針對只讀屬性進行修改操做 // obj.age = 80; // console.log(obj.age); delete obj.age; console.log(obj.age);
控制檯效果對比圖:
示例代碼:
// 開啓嚴格模式 'use strict'; /* 定義一個空對象 */ var obj = {}; // 設置對象obj是一個不可擴展的對象 Object.preventExtensions(obj); // 爲對象obj新增屬性 obj.name = '皮卡丘'; /* 調用對象 */ console.log(obj);
控制檯效果對比圖:
示例代碼:
// 開啓嚴格模式 'use strict'; /* 定義一個函數 */ function fn(a,a,b) { console.log(a + a + b); } /* 調用函數並傳遞參數 */ fn(1,2,3);
控制檯效果對比圖:
嚴格模式下 - arguments對象獲取參數的值與形參有關的
示例代碼:
// 開啓嚴格模式 'use strict'; function fn(value) { var value = '皮卡丘'; console.log(value);// 調用結果爲 皮卡丘 - 就近原則 /* * 嚴格模式下 - arguments對象獲取參數的值與形參有關的 * 若是局部變量與形參名相同 - 就根據就近原則進行獲取 * 嚴格模式下 - arguments對象獲取參數的值與形參無關的 */ console.log(arguments[0]);// 調用結果爲 皮卡丘 , 嚴格模式下調用結果爲 皮皮蝦 } fn('皮皮蝦');
控制檯效果對比圖:
示例代碼:
// 開啓嚴格模式 'use strict'; /* 定義一個函數 */ function fn() { console.log(arguments.length); /* 將callee()方法返回 */ return arguments.callee; } fn();
控制檯效果對比圖:
示例代碼:
// 開啓嚴格模式 'use strict'; // 在全局做用域 function fn() { // 在函數做用域 function n() {} } // 在嚴格模式下, 函數的定義只能在全局做用域與函數做用域(不能再塊級做用域定義函數) for (var i=0; i<10; i++){ //ECMAScript 6新增 - 存在着塊級做用域 var v = 100; function f() { console.log('這是一個皮卡丘'); } } console.log(v); f();
控制檯對比效果圖:
示例代碼:
// 開啓嚴格模式 'use strict'; // 在嚴格模式下,增長eval做用域 - eval()函數定義的變量只能在當前eval()函數中使用 eval('var v = "一花一世界";'); // 在全局做用域中調用變量 - 則會報錯 console.log(v);// 非嚴格模式下調用結果爲 一花一世界
控制檯效果對比圖:
示例代碼:
// 開啓嚴格模式 "use strict"; /* 使用 eval 或 arguments 作爲標識符 */ 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;");
代碼效果圖:
示例代碼:
// 開啓嚴格模式 'use strict'; /* 定義全局變量 */ var v = 100; /* 定義函數 */ function fn() { console.log(this.v); } /* 使用appl()方法或call()方法來調用函數 */ fn.call(obj);// this 指向全局對象
控制檯效果對比圖: