JavaScript严格模式补充

声明

该文部分代码和内容节选自菜鸟教程,仅用作个人学习,特此声明

链接https://www.runoob.com/

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;      // 报错
posted @   无关风月7707  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示