JavaScript严格模式补充
声明
该文部分代码和内容节选自菜鸟教程,仅用作个人学习,特此声明
JavaScript的严格检查模式
"use strict" 指令只允许出现在脚本或函数的开头。
出现在脚本开头是全局严格检查模式,函数的开头是局部严格检查模式,只在函数内部起作用
1、不用严格检查模式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>严格检查模式练习</title>
</head>
<body>
<script>
i = 1;
</script>
</body>
</html>
此时的页面控制台正常输出
2、使用严格检查模式
'use strict'写在script标签内部第一行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>严格检查模式练习</title>
</head>
<body>
<script>
'use strict'
i = 1;
</script>
</body>
</html>
由于使用了严格检查模式,此时的i = 1
这种定义方式是错误的,输出结果自然报错为i未定义
所以,以后写JavaScript尽量先在最上边调用严格检查模式,然后再写代码来练习自己代码的规范性
3、严格模式的限制
1.不允许使用未声明变量
"use strict";
x = 3.14; // 报错 (x 未定义)
x = {p1:10, p2:20}; // 报错 (x 未定义),对象也是一个变量
2.不允许删除变量或对象
"use strict";
var x = 3.14;
delete x; // 报错
3.不允许删除函数
"use strict";
function x(p1, p2) {};
delete x; // 报错
4.不允许变量重名
"use strict";
function x(p1, p1) {}; // 报错
5.不允许使用八进制
"use strict";
var x = 010; // 报错
6.不允许使用转义字符
"use strict";
var x = \010; // 报错
7.不允许对只读属性赋值:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // 报错
8.不允许对一个使用get方法读取的属性进行赋值
"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14; // 报错
9.不允许删除一个不允许删除的属性:
"use strict";
delete Object.prototype; // 报错
10.变量名不能使用 "eval" 、 "arguments" 字符串:
"use strict";
var eval = 3.14; // 报错
var arguments = 3.14; // 报错
11.不允许使用以下这种语句:
"use strict";
with (Math){x = cos(2)}; // 报错
12.由于一些安全原因,在作用域 eval() 创建的变量不能被调用:
"use strict";
eval ("var x = 2");
alert (x); // 报错
13.禁止this关键字指向全局对象。
function f(){
return !this;
}
// 返回false,因为"this"指向全局对象,"!this"就是false
function f(){
"use strict";
return !this;
}
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
因此,使用构造函数时,如果忘了加new,this不再指向全局对象,值为undefined,报错。
function f(){
"use strict";
this.a = 1;
};
f();// 报错,this未定义
4、严格模式保留关键字
为了向将来Javascript的新版本过渡,严格模式新增了一些保留关键字,这些关键字不能被用作变量名
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // 报错
分类:
JavaScript 入门随笔
, Day41
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律