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忽略不影响,建议使用严格模式书写代码!!!!
- JavaScript严格模式
- Javascript 严格模式详解
- Javascript 严格模式详解
- javascript严格模式
- Javascript 严格模式详解
- Javascript 严格模式详解
- Javascript 严格模式详解
- JavaScript严格模式详解
- Javascript 严格模式详解
- Javascript 严格模式详解
- JAVASCRIPT严格模式
- Javascript的严格模式
- Javascript 严格模式详解
- Javascript 严格模式详解
- Javascript 严格模式
- Javascript 严格模式详解
- Javascript 严格模式详解
- Javascript 严格模式详解
- cookie 跨域访问
- getHibernateTemplate()和getSession()的区别
- 如何在ASP.NET中创建OpenID
- Underscore.js (1.7.0) 中文文档
- linux dd命令[用于制作U盘启动盘的神奇的命令]
- JAVASCRIPT严格模式
- LeetCode--Binary Tree Preorder Traversal
- 修改Android工程版本
- 条款26 尽可能延后变量定义出现的时间
- 《poi excel批量导入数据库 2003与2007兼容》使用说明
- Xcode6创建新项目后没有pch文件以及黑边问题
- mysql5.5设置字符编码
- Work Process Overview Fields
- 关于新手搭建PHP环境遇到的几个问题