javascript中的严格模式(use strict)

简介: javascript中的严格模式(use strict)

下面是一个使用JavaScript严格模式的代码示例。在这个示例中,我将展示如何在整个脚本中启用严格模式,并演示一些严格模式下可能遇到的问题。

"use strict"; 
 
a = 1;  // Uncaught ReferenceError: a is not defined
// 尝试使用一个未声明的变量 
// 在严格模式下,这将抛出一个 ReferenceError 
// var undeclaredVariable; 
console.log(undeclaredVariable); // ReferenceError: undeclaredVariable is not defined 
 
 
// 尝试删除一个变量 
var declaredVariable = "Hello, World!"; 
delete declaredVariable; // SyntaxError: Identifier 'declaredVariable' can't be deleted 
console.log(declaredVariable); // "Hello, World!" 
 
 
// 尝试使用八进制字面量 
var octalLiteral = 010; // SyntaxError: Octal literals are not allowed in strict mode. 
 
 
// 尝试修改 this 的值 
function exampleFunction() { 
return this; 
} 
 
 
var obj = { prop: 42 }; 
var func = exampleFunction.bind(obj); 
func.this = "newThis"; // TypeError: Cannot assign to read only property 'this' of function 
 
 
// 尝试使用 with 语句 
// 在严格模式下,with 语句是不允许的 
// with (Math){x = cos(2)}; 
 
 
// 尝试使用 eval 或 arguments 作为变量名 
// 在严格模式下,这将抛出 SyntaxError 
// var eval = 1; 
// var arguments = 2; 
 
 
// 尝试使用函数的 caller 或 callee 属性 
function showCaller() { 
console.log(showCaller.caller); // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them 
} 
 
 
showCaller(); 
 
 
// 严格模式下的函数参数变化 
function strictFunction(a, b) { 
"use strict"; 
a = 42; 
var b = "Hello"; 
console.log(arguments[0]); // 仍然输出原始值,不会受到函数内部 a变量变化的影响 
} 
 
 
strictFunction(10, "World"); // 输出 10 
 
 
// 严格模式下的其他正常代码 
function safeFunction() { 
"use strict"; 
var safeVariable = "Safe to use"; 
console.log(safeVariable); 
} 
 
当然,关于JavaScript严格模式,还有很多细节和用法可以探讨。下面我将继续提供一些关于严格模式的示例和说明。
 
严格模式下的函数参数和arguments对象
在严格模式下,函数内的参数改变不会影响到arguments对象,反之亦然。这是为了避免一些混淆和潜在的错误。
 
javascript
"use strict";  
  
function exampleFunction(value) {  
    value = "new value";  
    console.log(arguments[0]); // 输出 "original value",因为在严格模式下,value的改变不会影响arguments[0]  
    arguments[0] = "changed value";  
    console.log(value); // 输出 "new value",因为arguments[0]的改变不会影响value  
}  
  
exampleFunction("original value");
严格模式下的只读属性
在严格模式下,尝试为只读属性赋值会抛出错误。
 
javascript
"use strict";  
  
var obj = Object.freeze({  
    property: "Hello"  
});  
  
obj.property = "World"; // TypeError: Cannot assign to read only property 'property' of object '#<Object>'
严格模式下的eval使用
在严格模式下,eval内的变量和函数声明不会创建全局变量,也不会修改外部作用域。
 
javascript
"use strict";  
  
eval("var test = 42;");  
console.log(test); // ReferenceError: test is not defined  
  
function outerFunction() {  
    var outerVariable = "outer";  
    eval("var innerVariable = 'inner';");  
    console.log(innerVariable); // 输出 "inner",但是不会影响到外部作用域  
}  
  
outerFunction();  
console.log(innerVariable); // ReferenceError: innerVariable is not defined
严格模式下的this值
在严格模式下,全局作用域下的this值为undefined,而不是全局对象(在浏览器中通常是window)。
 
javascript
"use strict";  
  
console.log(this === undefined); // 输出 true
在函数内部,this的值不会因为外部函数的调用方式而随意改变(比如通过call、apply或bind方法)。
 
javascript
"use strict";  
  
function exampleFunction() {  
    return this;  
}  
  
var obj = { value: 42 };  
var func = exampleFunction.bind(obj);  
  
console.log(func()); // 输出 obj 对象
严格模式下的重复属性名
在严格模式下,对象字面量中不能包含两个相同的属性名。
 
javascript
"use strict";  
  
var obj = {  
    prop1: "value1",  
    prop1: "value2" // SyntaxError: Duplicate data property in object literal not allowed in strict mode  
};
这些示例进一步展示了严格模式如何改变JavaScript的行为,帮助开发者编写更安全、更可靠的代码。在编写JavaScript代码时,推荐始终启用严格模式,并遵循其规则,以确保代码质量和减少潜在的错误。
safeFunction(); // 输出 "Safe to use"

在这个示例中,我注释掉了那些会在严格模式下导致错误的代码,并在其下方提供了相应的错误信息。同时,我也展示了一些在严格模式下仍然可以安全使用的代码。


请注意,在真实项目中,通常你会想要避免在严格模式下使用被禁止的特性,并且确保你的代码遵循严格模式的规则,以便能够捕获潜在的错误并写出更健壮的代码。在编写新的JavaScript代码时,启用严格模式是一个很好的实践。


相关文章
|
4天前
|
JavaScript 前端开发 开发者
js代码中“use strict” 是什么意思? 使用它的区别是什么?
js代码中“use strict” 是什么意思? 使用它的区别是什么?
22 1
|
4天前
|
JavaScript 前端开发 开发者
js代码中“use strict” 是什么意思? 使用它的区别是什么
js代码中“use strict” 是什么意思? 使用它的区别是什么
22 1
|
4天前
|
JavaScript 前端开发 安全
|
4天前
|
JavaScript 前端开发 安全
JavaScript高级主题:JavaScript 中的严格模式是什么?有什么好处?
JavaScript高级主题:JavaScript 中的严格模式是什么?有什么好处?
46 0
|
4天前
|
JavaScript 前端开发 安全
js 代码中的 “use strict“; 是什么意思 ?
js 代码中的 “use strict“; 是什么意思 ?
|
JavaScript 前端开发 安全
JavaScript 严格模式详解
JavaScript 严格模式详解
270 0
|
JavaScript 安全 前端开发
Javascript 严格模式详解
作者: 阮一峰 日期: 2013年1月14日 一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。
1105 0
|
JavaScript 安全 前端开发
【javascript】 的严格模式 详解
一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立”严格模式”的目的,主要有以下几个: - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; - 消除代码运行的一些不安全之处,保证代码运行的安全;
1358 0
|
JavaScript 前端开发 安全
|
JavaScript 前端开发
Javascript 严格模式详解
Javascript 严格模式详解 阮一峰,关注有近两年,每次收到的邮件,都会认真地阅读,绝对的有内函的家伙,除了技术篇,很多想法和思路,赶脚着似懂非懂,真乃室内高人 :】 (现在也没有世外的地方了,只能用室内代之,且表高远吧!)
858 0