JavaScript 严格模式(use strict)
顾名思义,js严格模式(use strict) 即在严格条件下运行的js代码。
使用"use strict" 指令
"use strict" 指令在javascript 1.8.5(ECMA Script)即ES5中新增。
"use strict" 它不是一条语句,但是是一个字面量表达式,在javascript旧版本中会被忽略。
"use strict" 的目的是将指定代码在严格模式下执行。
"use strict" 指令只允许出现在JS文件或函数的开头
目前支持严格模式的浏览器
| 浏览器 | 是否支持 |
|---|---|
| Internet Explorer 10+ | ✅ 是 |
| FireFox 4+ | ✅ 是 |
| Chrome 13+ | ✅ 是 |
| Safari 5.1+ | ✅ 是 |
| Opera 12+ | ✅ 是 |
严格模式的申明
严格模式通过在脚本或函数的头部添加 "use strict" 来表示申明。
"use strict";
a = 'brian'; // 严格模式下执行会报错,a未定义
> Uncaught ReferenceError: a is not defined
"use strict";
testFunction();
function testFunction() {
a = "brian" // 严格模式下执行会报错,a未定义
}
函数内部申明严格模式
只会在函数中起效
a = "Brian";
testFunction();
function testFunction() {
"use strict";
b = "Hi."; // 函数内严格模式下执行会报错,b未定义。
}
经过上面的示例,我们已经了解严格模式的作用了,那为什么要使用严格模式?
消除js语法的一些不合理,不严谨,减少怪异的行为;
- 消除代码运行的一些不安全,保证代码运行的安全
- 提高编译效率,增加运行速度(这里可以了解JS变量解析方式)
- 在新的ES系列(ES6+)已经全面遵循严格模式
严格模式的限制
| 限制模式 | 示例代码(不允许的错误示例) |
|---|---|
| 不允许使用未经申明的变量(包含对象) | "use strict"; |
| 不允许删除变量和对象 | "use strict"; |
| 不允许删除函数 | "use strict"; |
| 不允许变量重名 | "use strict"; |
| 不允许使用八进制 | "use strict"; |
| 不允许使用转义字符 | "use strict"; |
| 不允许对只读数据赋值 | "use strict"; |
| 不允许对一个使用的getter方法读取的值进行赋值 | "use strict"; |
| 不允许删除一个不允许删除的属性 | "use strict"; |
| 不允许对变量命名使用特殊字符 eval,arguments 关键字 | "use strict"; |
| 不允许是用with(Math) 语句 | "use strict"; |
| 不允许使用eval中定义的变量调用(安全原因) | "use strict"; |
| 禁止this 关键字指向全局对象 | "use strict"; |
1. 不允许使用未经申明的变量(包含对象)
2. 不允许删除变量和对象
3. 不允许删除函数
4. 不允许变量重名
5. 不允许使用八进制
6. 不允许使用转义字符
7. 不允许对只读数据赋值
8. 不允许对一个使用的getter方法读取的值进行赋值
9. 不允许删除一个不允许删除的属性
10. 不允许对变量命名使用特殊字符 eval,arguments关键字
11. 不允许是用with(Math) 语句
12. 不允许使用eval中定义的变量调用(安全原因)
13. 禁止this 关键字指向全局对象
保留的关键字
| 关键字 | 说明 |
|---|---|
| implements | - |
| interface | - |
| let | ES6 新增特性 用来申明变量 |
| package | - |
| private | - |
| protected | - |
| public | - |
| static | - |
| yield | 同步调用 |