javascript中使用‘use strict’和不使用的区别

  1. 错误处理:

严格模式使得 JavaScript 对某些可能的问题抛出错误,而在非严格模式下,这些问题可能会被忽略。例如,未声明的变量(即全局变量)在非严格模式下会被隐式地创建为全局变量,而在严格模式下会抛出错误。(例子如下:)

非严格模式:
// 未声明的变量在非严格模式下不会抛出错误  
var x = y; // y 未声明,但不会被报错

严格模式:
"use strict";  
// 严格模式下,未声明的变量会抛出错误  
var x = y; // ReferenceError: y is not defined
  1. 变量声明

在严格模式下,变量必须在使用之前声明。否则,会抛出引用错误。这有助于防止使用未声明的变量,从而减少潜在的错误(例子如下:)

非严格模式:
// 在使用变量之前未声明,在非严格模式下不会报错  
function example() {  
    x = 10;  
    var x;  
}
严格模式:
// 严格模式下,在使用变量之前未声明会抛出错误  
"use strict";  
function example() {  
    x = 10; // ReferenceError: x is not defined  
    var x;  
}
  1. 对象字面量

在严格模式下,重复的属性名称或参数名称在对象字面量或函数参数列表中会导致语法错误。这有助于捕获可能的错误和不一致性。(例子如下:)

// 非严格模式下,重复的属性名称不会抛出错误  
var obj = {  
    a: 1,  
    a: 2  
};  
console.log(obj.a); // 输出 2
  
// 严格模式下,重复的属性名称会抛出错误  
"use strict";  
var obj = {  
    a: 1,  
    a: 2 // SyntaxError: Duplicate data property in object literal not allowed in strict mode  
};
  1. 函数声明

在严格模式下,函数声明必须在代码块的顶部,否则会导致语法错误。这有助于保持代码的可读性和一致性。(例子如下:)

非严格模式下,函数声明可以在代码块中间  
if (true) {  
    function example() {  
        console.log("Hello");  
    }  
}  
example(); // 输出 "Hello"

严格模式下,函数声明必须在代码块顶部  
"use strict";  
if (true) {  
    function example() { // SyntaxError: Function declaration not allowed in strict mode  
        console.log("Hello");  
    }  
}
  1. this 关键字

在严格模式下,this 关键字的值在函数调用时始终为 undefined(除非该函数是对象的方法)。这有助于减少关于 this 关键字行为的混淆。(例子如下:)

非严格模式下,函数内的this可能不指向全局对象  
function example() {  
    console.log(this);  
}  
example(); // 输出全局对象,通常是 window

严格模式下,函数内的this在函数调用时始终为undefined  
"use strict";  
function example() {  
    console.log(this); // undefined  
}  
example();
  1. 删除变量、函数和函数参数

在严格模式下,尝试删除变量、函数或函数参数会抛出错误。这有助于防止意外地修改代码的状态。(例子如下:)

非严格模式下,可以删除变量  
var x = 10;  
delete x; // 在非严格模式下不会抛出错误,但x仍然存在

严格模式下,尝试删除变量会抛出错误  
"use strict";  
var x = 10;  
delete x; // TypeError: Cannot delete property 'x' of #<Object>
  1. 八进制字面量

在严格模式下,八进制字面量会导致语法错误。这有助于防止使用可能导致混淆的八进制表示法。(例子如下:)

非严格模式下,八进制字面量有效  
var num = 010; // 等于 8

严格模式下,八进制字面量会抛出错误  
"use strict";  
var num = 010; // SyntaxError: Octal literals are not allowed in strict mode.
  1. eval() 函数

在严格模式下,eval() 函数的作用域限制在调用它的函数内部,而不是全局作用域。这有助于减少 eval() 函数可能带来的安全风险。(例子如下:)

非严格模式下,eval() 的作用域是全局作用域  
var x = 20;  
function testEval() {  
    var x = 10;  
    eval("console.log(x);"); // 输出 20,因为使用的是全局变量 x  
}  
testEval();

严格模式下,eval() 的作用域限制在调用它的函数内部 
"use strict";   
var x = 20;  
function testEval() {  
    var x = 10;  
    eval("console.log(x);"); // 输出 10,因为使用的是函数内部的 x  
}  
testEval();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值