ECMAScript严格模式简介
写在前面
大家都知道使用"use strict"表示使用ECMAScript进行严格模式,使用"use strict"有两种方式
- 在文件头部写上它(使得整个脚本都使用严格模式)
- 在函数顶部写上它(只在函数内打开严格模式)
对于严格模式和非严格模式下,到底有哪些不同,下面我将一一道来。
变量
严格模式下 | 非严格模式下 |
不允许意外创建全局变量 | 允许省去var来创建全局变量 |
不能对变量调用delete操作符(也就是说使用delete来删除变量时操作会直接报错) | 允许使用delete但操作失败(也就是说使用delete来删除变量时操作时不会直接报错) |
对象
严格模式下 | 非严格模式下 |
不允许为只读属性赋值 | 允许为只读属性赋值 |
不允许对不可配置(nonconfiguratable)属性使用delete操作符 | 允许对不可配置(nonconfiguratable)属性使用delete操作符 |
不允许为不可扩展(nonextensible)的对象添加属性 | 允许为不可扩展(nonextensible)的对象添加属性 |
使用对象字面量时,属性名必须唯一 | 使用对象字面量时,属性名可以重复 |
函数
严格模式下 | 非严格模式下 |
函数参数不能重复 | 函数参数可以重复,如果重复的话,参数最终的取值为第二个,如果要取得第一个的话则得使用arguments |
函数参数和arguments是完全独立的 | 修改命名参数的值同时会反映到arguments对象当中 |
淘汰arguments.callee和arguments.caller | arguments.callee代表引用函数本身、arguments.caller调用当前引用函数的函数 |
不允许使用inplements、interface、let、package、private、protected、public、static、yield作为函数名 (因为这些是js当中的保留字并且已经在新的语法当中使用起来了) |
允许使用inplements、interface、let、package、private、protected、public、static、yield作为函数名 |
eval
在严格模式下在eval中不再创建变量或函数
可以在eval中声明变量和函数,但这些变量或函数只能被求值的特殊作用域中有效,随后就被销毁了。
eval和arguments
严格模式下禁止使用eval和arguments作为标识符,也不允许读写它们的值
非严格模式下可以重写eval,也可以给arguments赋值
抑制this
在非严格模式下使用apply和call方法时,null或undefined值被转换为全局对象
严格模式下,传进去的是什么,this就是什么
with
严格模式下已经废弃了with,但是非严格模式下可以使用with
parseInt的八进制
严格模式下去掉了javaScript的八进制字符量
作者:静逸
出处:http://www.cnblogs.com/liyunhua
本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
如果您觉得本篇博文对您有所收获,觉得小女子还算用心,请点击右下角的 [推荐],谢谢!