JAVASCRIPT严格模式

来源:互联网 发布:stc单片机官网 编辑:程序博客网 时间:2024/05/29 18:02

1. 目的

- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

- 消除代码运行的一些不安全之处,保证代码运行的安全;

- 提高编译器效率,增加运行速度;

- 为未来新版本的Javascript做好铺垫。

2.进入严格模式标识

1.针对整个文件

使用”use strict”,如果在脚本文件第一行调用,则整个脚本都会执行严格模式。

2.针对函数

在一个函数体内声明,只作用于整个函数有效

3.脚本文件的变通方法

上述写法能够使两个文件整合时严格模式定义不会出现问题。

4.严格模式下语法和行为变化

       1.正常模式下,一个变量没有声明,自动变成全局变量,但是严格模式下会报错。

              “usestrict”

              v=1;//报错

              vara=v+1;

       2.Javascript语言的一个特点,就是允许"动态绑定",即某些属性和方法到底属于哪一个对象,不是在编译时确定的,而是在运行时(runtime)确定的。严格模式对动态绑定做了一些限制。某些情况下,只允许静态绑定。也就是说,属性和方法到底归属哪个对象,在编译阶段就确定。这样做有利于编译效率的提高,也使得代码更容易阅读,更少出现意外。

              a.禁止使用with, 因为with语句无法在编译时就确定,属性到底归属哪个对象。

                     “use strict”

                     With(o){//语法错误

                     }

              b.创设eval作用域,在正常模式下eval的作用域取决于它是在全局作用域还是函数作用域,而在严格模式下,它拥有自己的作用域。

              c.禁止this关键字指向全局对象

              d.如果声明是没有加new,那么this不再指向全局对象

              e.禁止在函数内部遍历调用栈

              f.严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。       

     g. 正常模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。严格模式下,将报错。

h. 严格模式下,对一个使用getter方法读取的属性进行赋值,会报错。

i. 严格模式下,对禁止扩展的对象添加新属性,会报错。

J. 严格模式下,删除一个不可删除的属性,会报错。

3.重命名错误

a)        对象不能有重名的属性
正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。
b)       函数不能有重名的参数
正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。

c)        正常模式下,整数的第一位如果是0,表示这是八进制数,比如0100等于十进制的64。严格模式禁止这种表示法,整数第一位为0,将报错。

4.arguments对象的限制

      a.不允许对arguments赋值
         b.arguments不再追踪参数的变化
         c.禁止使用arguments.callee
         d. 将来Javascript的新版本会引入"块级作用域"。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。
         e.保留字

              为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements,interface, let, package, private, protected, public, static, yield。

 

      注:除了IE6-9,其它浏览器均已支持ES5严格模式,但IE6-9忽略不影响,建议使用严格模式书写代码!!!!

0 0
原创粉丝点击