JavaScript严格模式(use strict)

JavaScript严格模式(use strict)知识点汇总

JavaScript严格模式(use strict)知识点汇总

一份为编程小白准备的详细指南,用大白话解释严格模式的方方面面

什么是严格模式?

严格模式是JavaScript中的一种特殊模式,它通过更严格的语法检查和行为约束,帮助你写出更安全、更规范的代码。

想象一下,普通模式就像自行车🚲,你可以随意骑行(但也容易摔倒);而严格模式就像带辅助轮的自行车,虽然限制多一些,但能防止你犯常见错误。

启用严格模式很简单,只需要在脚本开头或函数开头添加一句话:“use strict”;

为什么要使用严格模式?

  • 防止意外创建全局变量(忘记写var/let/const)
  • 消除一些不安全的代码写法
  • 禁止使用一些未来可能成为保留字的关键字
  • 使JavaScript引擎可以更好地优化代码
  • 帮助开发者发现代码中的潜在问题

📌 重要提示:

严格模式不是所有浏览器的默认模式,必须明确声明才能启用。

严格模式可以应用于整个脚本,也可以只应用于单个函数。

严格模式的主要变化和规则

1. 变量必须先声明后使用

在普通模式中,如果你忘记声明变量(不使用var/let/const),JavaScript会悄悄创建一个全局变量。

在严格模式中,这种做法会导致错误:

“use strict”;
myVar = 10; // 报错:myVar is not defined

这样能防止你意外污染全局命名空间。

2. 禁止删除不可删除的属性

在普通模式中,尝试删除变量、函数或不可删除的属性会静默失败(不会报错)。

在严格模式中,这些操作会抛出错误:

“use strict”;
var x = 10;
delete x; // 报错:Cannot delete variable

delete Object.prototype; // 报错:Cannot delete property
3. 函数参数不能重名

在普通模式中,函数允许有重复的形参名(最后一个有效)。

在严格模式中,这会抛出语法错误:

“use strict”;
function sum(a, a, c) { // 报错:Duplicate parameter name
  return a + a + c;
}

这样可以避免参数名冲突导致的bug。

4. 禁止使用with语句

with语句会延长作用域链,但会导致性能下降和代码不可预测。

严格模式完全禁止使用with语句:

“use strict”;
with (Math) { // 报错:Strict mode code may not include a with statement
  x = cos(3);
}

这样能提高编译器优化的可能性。

5. eval行为的变化

在严格模式中,eval创建的变量只在eval代码块内部有效:

“use strict”;
eval(“var x = 10;”);
console.log(x); // 报错:x is not defined

这样可以防止eval污染外部作用域。

另外,不能使用eval作为变量名:

“use strict”;
var eval = 10; // 报错:Unexpected eval or arguments in strict mode
6. this值的变化

在普通函数中,普通模式下this指向全局对象(浏览器中是window)。

在严格模式中,this的值是undefined

“use strict”;
function showThis() {
  console.log(this); // 输出:undefined
}
showThis();

构造函数调用时,如果忘记写new关键字,普通模式会创建全局变量,但严格模式会报错:

“use strict”;
function Person(name) {
  this.name = name;
}
// 忘记new关键字:
var p = Person(“John”); // 报错:Cannot set property ‘name’ of undefined
7. 禁止八进制字面量

在普通模式中,数字以0开头表示八进制(如010等于十进制的8)。

严格模式禁止这种写法:

“use strict”;
var num = 010; // 报错:Octal literals are not allowed

可以使用ES6的0o前缀表示八进制:

var num = 0o10; // 允许,等于十进制的8
8. 对只读属性赋值会报错

在普通模式中,给只读属性赋值会静默失败。

在严格模式中,这会抛出错误:

“use strict”;
var obj = {};
Object.defineProperty(obj, “x”, { value: 42, writable: false });
obj.x = 9; // 报错:Cannot assign to read only property
9. 保留字限制

严格模式限制使用一些保留字作为变量名或函数名:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
“use strict”;
var private = 10; // 报错:Unexpected strict mode reserved word

📝 严格模式使用总结

  • 全局启用: 在脚本文件的最顶部添加 "use strict";
  • 局部启用: 在函数体的最顶部添加 "use strict";
  • 模块自动启用: ES6模块系统默认使用严格模式
  • 向下兼容: 严格模式在旧版浏览器中会被忽略
  • 迁移建议: 逐步启用严格模式,先用于新代码
  • 最佳实践: 现代JavaScript开发推荐始终使用严格模式

什么时候应该使用严格模式?

强烈建议在所有新项目中使用严格模式。它能帮你避免很多常见错误,使代码更安全、更易维护。

JavaScript严格模式知识点汇总 | 为编程小白准备的详细指南

记住:开启严格模式只需要一行代码,却能带来很多好处!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部