使用"use strict" 的目的是指定代码在严格条件下执行。
严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明。
不允许使用未声明的变量。
|
1
2
3
4
5
|
"use strict";myFunction();function myFunction() { y = 3.14; // 报错 (y 未定义)} |
在函数内部声明是局部作用域 (只在函数内使用严格模式):
|
1
2
3
4
5
6
|
x = 3.14; // 不报错 myFunction();function myFunction() { "use strict"; y = 3.14; // 报错 (y 未定义)} |
不允许删除变量或对象
|
1
2
3
|
"use strict";var x = 3.14;delete x; // 报错 |
不允许删除函数。
|
1
2
3
|
"use strict";function x(p1, p2) {}; delete x; // 报错 |
不允许变量重名:
|
1
2
|
"use strict";function x(p1, p1) {}; // 报错 |
不允许使用八进制:
|
1
2
|
"use strict";var x = 010; // 报错 |
不允许使用转义字符:
|
1
2
|
"use strict";var x = \010; // 报错 |
不允许对只读属性赋值:
|
1
2
3
4
|
"use strict";var obj = {};Object.defineProperty(obj, "x", {value:0, writable:false});obj.x = 3.14; // 报错 |
不允许删除一个不允许删除的属性:
|
1
2
|
"use strict";delete Object.prototype; // 报错 |
变量名不能使用 "eval" 字符串:
|
1
2
|
"use strict";var eval = 3.14; // 报错 |
变量名不能使用 "arguments" 字符串:
|
1
2
|
"use strict";var arguments = 3.14; // 报错 |
禁止this关键字指向全局对象
为什么使用严格模式: