Javascript中的严格模式 “use strict“

发布于:2024-03-26 ⋅ 阅读:(77) ⋅ 点赞:(0)

一、为什么使用严格模式?

在普通的 JavaScript 中,写错变量名会创建新的全局变量,
在严格模式中,写错变量名会抛出错误来提醒开发者

二、声明严格模式

通过在脚本或函数的开头添加 “use strict”; 来声明严格模式。"use strict" 指令只能在脚本或函数的开头被识别

  1. 在脚本开头进行声明,拥有全局作用域(脚本中的所有代码均以严格模式来执行)
"use strict";
x = 3.14;       // 这会引发错误,因为 x 尚未声明
"use strict";
myFunction();

function myFunction() {
     y = 3.14;   // 这会引发错误,因为 y 尚未声明
}
  1. 在函数中声明严格模式,拥有局部作用域(只有函数中的代码以严格模式执行)
x = 3.14;       // 这不会引发错误
myFunction();

function  myFunction() {
	"use strict";
	 y = 3.14;   // 这会引发错误
}

三、严格模式中不允许的事项

  1. 在不声明变量的情况下使用变量,是不允许的
"use strict";
num = 3.14;                // 这将引发错误
obj = {p1:10, p2:20};      // 这将引发错误
  1. 删除变量(或对象、函数)是不允许的
"use strict";
var x = 3.14;
delete x;                // 这将引发错误

function fn(p1, p2) {}; 
delete fn;                 // 这将引发错误
  1. 重复参数名是不允许的
"use strict";
function x(p1, p1) {};   // 这将引发错误
  1. 八进制数值文本是不允许的
"use strict";
var x = 010;             // 这将引发错误
  1. 转义字符是不允许的
"use strict";
var x = \010;            // 这将引发错误
  1. 写入只能获取的属性是不允许的
"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;            // 这将引发错误
  1. 删除不可删除的属性是不允许的
"use strict";
delete Object.prototype; // 这将引发错误
  1. 字符串 “eval” 不可用作变量
"use strict";
var eval = 3.14;         // 这将引发错误
  1. 字符串 “arguments” 不可用作变量
"use strict";
var arguments = 3.14;    // 这将引发错误
  1. with 语句是不允许的
"use strict";
with (Math){x = cos(2)}; // 这将引发错误
  1. 处于安全考虑,不允许 eval() 在其被调用的作用域中创建变量
"use strict";
eval ("var x = 2");
alert (x);               // 这将引发错误
  1. 严格模式中不允许使用为未来预留的关键词
  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // 这将引发错误
本文含有隐藏内容,请 开通VIP 后查看