导航
×
   ❮   
HTML CSS JavaScript PHP Go ECMS

JavaScript 教程

JS 简介 JS 如何使用 JS 输出 JS 语法 JS 语句 JS 注释 JS 变量 JS 运算符 JS 条件语句 JS 循环 JS 字符串 JS 数字 JS 函数 JS 对象 JS 日期 JS 数组 JS 类型化数组 JS 集合 JS Map 映射 JS Math JS 正则表达式 JS 数据类型 JS 错误 JS 事件 JS 编程 JS 关键字参考 JS 保留关键字参考 JS 运算符参考 JS 运算符优先级 JS UTF-8 字符 JS UTF-8 符号 JS UTF-8 表情符号 JS 版本

JavaScript 严格模式


"use strict"; 定义 JavaScript 代码应该以"严格模式"执行。


"use strict" 指令

"use strict" 是 JavaScript 1.8.5 中的新指令(ECMAScript version 5)。

它不算一条语句,而是一段文字表达式,更早版本的 JavaScript 会忽略它。

"use strict"; 的作用是指示 JavaScript 代码应该以"严格模式"执行。

在严格模式中,您无法,例如,使用未声明的变量。

除Internet Explorer 9 及更低版本外,所有现代浏览器都支持"严格使用":

Directive          
"use strict" 13.0 10.0 4.0 6.0 12.1

表中的数字指定完全支持该指令的第一个浏览器版本。

您可以在所有程序中使用严格模式。它帮助您编写更清晰的代码,比如防止您使用未声明的变量。

"use strict" 只是一个字符串,所以IE9即使不理解也不会抛出错误。


声明严格模式

通过在脚本或函数的开头添加 "use strict"; 来声明严格模式。

在脚本开头进行声明,拥有全局作用域(脚本中的所有代码均以严格模式来执行):

实例

"use strict";
x = 3.14;       // 这将导致错误  because x is not declared
亲自试一试 »

实例

"use strict";
myFunction();

function myFunction() {
   y = 3.14;   // 这也会导致错误  because y is not declared
}
亲自试一试 »

在函数中声明严格模式,拥有局部作用域(只有函数中的代码以严格模式执行):

x = 3.14;       // 这不会导致错误。 
myFunction();

function  myFunction() {
  "use strict";
    y = 3.14;   // 这将导致错误
}
亲自试一试 »

"use strict"; 语法

声明严格模式的语法被设计为兼容更早版本的 JavaScript。

编译 JavaScript 程序中的数值文字(比如 4+5)或字符串文字("Bill Gates")不会有负面效果。它只会编译为不存在的变量然后消失。

所有 "use strict"; 只会对"理解"其含义的新编译器产生影响。


为什么使用严格模式?

严格模式使我们更容易编写"安全的" JavaScript。

严格模式把之前可接受的"坏语法"转变为真实的错误。

举例来说,在普通的 JavaScript 中,错打变量名会创建新的全局变量。在严格模式中,此举将抛出错误,这样就不可能意外创建全局变量。

在普通 JavaScript 中,如果向不可写属性赋值,开发者不会得到任何错误反馈。

在严格模式中,向不可写的、只能读取的、不存在的属性赋值,或者向不存在的变量或对象赋值,将抛出错误。


严格模式中不允许的事项

在不声明变量的情况下使用变量,是不允许的:

"use strict";
 x = 3.14;                // 这将导致错误

亲自试一试 »

对象也是变量

在不声明对象的情况下使用对象也是不允许的:

"use strict";
 x = {p1:10, p2:20};      // 这将导致错误

亲自试一试 »

删除变量(或对象)是不允许的:

"use strict";
var x = 3.14;
delete x;                // 这将导致错误

亲自试一试 »

删除函数是不允许的:

"use strict";
function x(p1, p2) {}; 
delete x;                // 这将导致错误 

亲自试一试 »

重复参数名是不允许的:

"use strict";
function x(p1, p1) {};   // 这将导致错误

亲自试一试 »

八进制数值文本是不允许的:

"use strict";
var x = 010;             // 这将导致错误

亲自试一试 »

转义字符是不允许的:

"use strict";
var x = "\010";            // 这将导致错误

亲自试一试 »

写入只读属性是不允许的:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // 这将导致错误

亲自试一试 »

写入只能获取的属性是不允许的:

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // 这将导致错误

亲自试一试 »

删除不可删除的属性是不允许的:

"use strict";
delete Object.prototype; // 这将导致错误

亲自试一试 »

字符串 eval 不可用作变量:

"use strict";
var eval = 3.14;         // 这将导致错误

亲自试一试 »

字符串 arguments 不可用作变量:

"use strict";
var arguments = 3.14;    // 这将导致错误

亲自试一试 »

with 语句是不允许的:

"use strict";
with (Math){x = cos(2)}; // 这将导致错误

亲自试一试 »

处于安全考虑,不允许 eval() 在其被调用的作用域中创建变量:

"use strict";
eval ("var x = 2");
alert (x);             // 这将导致错误

亲自试一试 »

函数中的 this 关键字在严格模式下的行为不同。

this 关键字指调用函数的对象。

如果未指定对象,则严格模式下的函数将返回 undefined ,而正常模式下的函数将返回全局 object (window):

"use strict";
function myFunction() {
  alert(this); // 将提醒 "undefined"
}
myFunction(); 

亲自试一试 »


对未来的保障

严格模式中不允许使用为未来预留的关键词。

它们是:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // 这将导致错误

亲自试一试 »

警告!

"use strict" 指令只能在脚本或函数的开头被识别。


freew3c.com 中文网是独立运营的中文开发者学习平台,与 freew3c.com 无关联。提供的内容仅用于学习和测试,不保证内容的正确性。


Copyright @2020-2026 京ICP备888888号-8