1.什么是严格模式?
严格模式是在 ECMAScript5(ES5)中引入的,在严格模式下,JavaScript 对语法的要求会更加严格,一些在正常模式下能够运行的代码,在严格模式下将不能运行
2.启动严格模式
要启用严格模式,您只需要在 JavaScript 脚本的开头添加"use strict";或'use strict',示例代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <script> 'use strict'; x = 'http://baidu.com/'; // 此处报错:Uncaught ReferenceError: x is not defined at index.html:11 console.log(x); </script> </body> </html>
运行报如下错误
3.严格模式中的变化
(1).不允许使用未声明的变量
<script> 'use strict'; v = 1; for (let i = 0; i < 2; i++) {} </script>
代码报错信息如下:
(2).不允许删除变量或函数
'use strict'; let obj = { name: 'zs', age: 19, }; delete obj; function add(a, b) { return a + b; } delete add;
(3).函数中不允许有同名的参数
'use strict'; function add(a, a) { return a + a; }
(4).eval语句的作用域是独立的
'use strict'; eval('var x = 4;console.log(x)'); console.log(x);
(5).不允许使用 with 语句
'use strict'; let radiusl = 5; let areal = Math.PI * radiusl * radiusl; let radius2 = 5; with (Math) { let areal = PI * radius2 * radius2; }
(6).不允许写入只读属性
'use strict'; var person = { name: 'zs', age: 18 }; Object.defineProperty(person, 'gender', { value: 'female', writable: false }); person.gender = 'male';
(7).不允许使用八进制数
'use strict'; let x = 010; console.log(parseInt(x));
(8).不要在if语句中声明函数
'use strict'; let x = 010; console.log(parseInt(x));
(9).禁止使用 this 表示全局对象
在普通模式下,this 关键字表示全局对象 window,而在严格模式下,this关键字则表示 undefined。
'use strict'; let name = 'http://baidu.com'; function demoTest() { console.log(this); } demoTest();