“use strict”状态指示浏览器使用严格模式,是javaScript中一个相对少且安全的特征集。
特征列表(非完全列举)
- 不允许定义全局变量。(捕获没有用var声明的变量和变量名的拼写错误)
- 在严格模式下引起静默失败的声明将会抛出异常(声明 NaN = 5)
- 试图删除不能删除的属性将会抛出异常(delete object . prototype)
- 在一个对象中的所有属性名要唯一(var x = {x1 : “1”, x1 : “2”})
- 函数的参数名必须唯一(function sum(x, x){…})
- 禁止使用八进制数字语法(var x = 023; 一些开发者错误的认为前面的0不会改变数字)
- 禁止使用with关键字
- eval在严格模式中不引入新的变量
- 禁止删除声明变量(delete x)
- 禁止以任何形式对eval和arguments进行绑定或赋值
- 严格模式不会将arguments对象的值同步给形参。(例如,在函数sum(a, b) { return arguments[0] + b},这个写法是因为arguments[0]就绑定到了a上,等等。在正常模式下,对于第一个参数是arg的函数,对arg赋值会同时赋值给arguments[0],反之亦然(除非没有参数,或者arguments[0]被删除)。严格模式下,函数的arguments对象会保存函数被调用时的原始参数。Arguments[i]的值不会随之与之相应的参数的值的改变而变化,同名参数的值也不会随与之相应的arguments[i]的值的改变而变化。
- 不再支持arguments.callee。
译自:http://stackoverflow.com/questions/1335851/what-does-use-strict-do-in-javascript-and-what-is-the-reasoning-behind-it & answerd by gprasant
更详细的说明在MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode
相关链接:https://tc39.github.io/ecma262/#sec-strict-mode-of-ecmascript
http://yanhaijing.com/es5/#about
时间: 2024-10-25 14:23:34