【学习 JavaScript】 JavaScript 教程 JavaScript 简介 JavaScript 用法 JavaScript Chrome 中运行 JavaScript 输出 JavaScript 语法 JavaScript 语句 JavaScript 注释 JavaScript 变量 JavaScript 数据类型 JavaScript 对象 JavaScript 函数 JavaScript 作用域 JavaScript 事件 JavaScript 字符串 JavaScript 字符串模板 JavaScript 运算符 JavaScript 比较 JavaScript 条件语句 JavaScript switch 语句 JavaScript for 循环 JavaScript while 循环 JavaScript break 和 continue 语句 JavaScript typeof JavaScript 类型转换 JavaScript 正则表达式 JavaScript 错误 JavaScript 调试 JavaScript 变量提升 JavaScript 严格模式 JavaScript 使用误区 JavaScript 表单 JavaScript 表单验证 JavaScript 验证 API JavaScript 保留关键字 JavaScript this JavaScript let 和 const JavaScript JSON JavaScript void JavaScript 异步编程 JavaScript Promise JavaScript 代码规范 JS 函数 JavaScript 函数定义 JavaScript 函数参数 JavaScript 函数调用 JavaScript 闭包 JS 类 JavaScript 类 JavaScript 类继承 JavaScript 静态方法 JS HTML DOM DOM 简介 DOM HTML DOM CSS DOM 事件 DOM EventListener DOM 元素 HTMLCollection 对象 NodeList 对象 JS 高级教程 JavaScript prototype JavaScript Number 对象 JavaScript String JavaScript Date(日期) JavaScript Array(数组) JavaScript Boolean(布尔) JavaScript Math(算数) JavaScript RegExp 对象 JS 浏览器BOM JavaScript Window JavaScript Window Screen JavaScript Window Location JavaScript Window History JavaScript Navigator JavaScript 弹窗 JavaScript 计时事件 JavaScript Cookie JS 库 JavaScript 库 JavaScript 测试 jQuery JavaScript 测试 Prototype JS 实例 JavaScript 实例 JavaScript 对象实例 JavaScript 浏览器对象实例 JavaScript HTML DOM 实例 JavaScript 总结 JS 参考手册

JavaScript 严格模式学习笔记

什么是严格模式?

JavaScript 严格模式是 ECMAScript 5 引入的一种不同的 JavaScript 执行模式,它修复了许多 ECMAScript 3 中存在的问题,并对 JavaScript 引擎执行代码时的行为做了一些限制,以避免可能导致错误的行为。

你可以通过在代码文件或函数的开头添加 'use strict'; 来启用严格模式。

如下所示:

JavaScriptCopy Code
'use strict'; function myFunction() { // 函数体 }

严格模式的特点

  1. 禁止使用未声明的变量。
  2. 禁止删除变量或函数。
  3. 对象字面量属性名不能重复。
  4. 函数的参数名不能重复。
  5. evalarguments 不能被重新赋值。
  6. with 语句不能使用。
  7. 变量名不能与关键字重名。
  8. this 指向变得更加明确。

示例

下面是一些具体的实例来演示严格模式的一些特点。

查找未声明的变量

在严格模式下,如果我们使用未声明的变量,会抛出一个引用错误。

如下所示:

JavaScriptCopy Code
'use strict'; x = 3.14;

上述代码将会抛出以下错误:

Copy Code
Uncaught ReferenceError: x is not defined

禁止删除变量或函数

在严格模式下,如果我们试图删除一个变量或函数,会抛出一个类型错误。

如下所示:

JavaScriptCopy Code
'use strict'; var x = 1; delete x;

上述代码将会抛出以下错误:

Copy Code
Uncaught TypeError: Cannot delete property 'x' of #<Window>

对象字面量属性名不能重复

在严格模式下,如果我们定义一个对象字面量,并在其中定义了重复的属性名,会抛出一个语法错误。

如下所示:

JavaScriptCopy Code
'use strict'; var person = {name: "John", name: "Doe"};

上述代码将会抛出以下错误:

Copy Code
Uncaught SyntaxError: Duplicate data property in object literal not allowed in strict mode

函数的参数名不能重复

在严格模式下,如果我们在同一个函数中定义了重复的参数名,会抛出一个语法错误。

如下所示:

JavaScriptCopy Code
'use strict'; function myFunction(x, x) { // 函数体 }

上述代码将会抛出以下错误:

Copy Code
Uncaught SyntaxError: Duplicate parameter name not allowed in this context

evalarguments 不能被重新赋值

在严格模式下,我们不能对 evalarguments 赋值。

如下所示:

JavaScriptCopy Code
'use strict'; eval = 3.14;

上述代码将会抛出以下错误:

Copy Code
Uncaught TypeError: Assignment to eval or arguments is not allowed in strict mode

with 语句不能使用

在严格模式下,我们不能使用 with 语句。

如下所示:

JavaScriptCopy Code
'use strict'; with (Math) { x = cos(2); }

上述代码将会抛出以下错误:

Copy Code
Uncaught SyntaxError: Strict mode code may not include a with statement

变量名不能与关键字重名

在严格模式下,我们不能使用一些 JavaScript 关键字作为变量名。例如,letclassconst 等。

如下所示:

JavaScriptCopy Code
'use strict'; var let = "Hello";

上述代码将会抛出以下错误:

Copy Code
Uncaught SyntaxError: Unexpected token 'let'. Expected an identifier name.

this 指向变得更加明确

在严格模式下,函数内部的 this 值不再是全局对象,而是保持 undefined 或者绑定到一个值。

JavaScriptCopy Code
'use strict'; function myFunction() { console.log(this); } myFunction(); // 输出:undefined

总结

JavaScript 严格模式对于保证代码的安全性和可读性有很大的帮助,建议在写代码时启用严格模式。