js 严格模式

"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。
use strict是ECMAscript5的特性,不建议在全局使用use strict,因为当压缩不同文件时候,一个文件使用了use strict,一个没有使用,没有使用use strict的文件就会报错
1.作用
  消除js语法不合理、不严谨、不安全的问题;提高编译器效率,增加运行速度
2.支持的浏览器
  IE10+,Firefox4+,safari12+,opera12+,chrome
3.规则
  变量:
    不允许创建全局变量 eg: name = "bella";
    不能对变量进行delete操作 eg: var name = "bella"; delete name;
  对象:
    不能为只读属性赋值:
      ECMAscript5出现了Object.definePropotype方法改变了javascript语言中所有object是Public的这一说法;
      Object.definePropotype(obj,prop,descriptor):需要添加或修改的对象,属性名称,属性描述;
      var person = {name:"bella",sex:"female"};Object.definePropotype(person ,"name",{value:"alias",writable:false})
    不能为不可配置的属性使用delete操作
      不可配置也是通过Object.definePropotype来设置的
      var person = {name:"bella",sex:"female"};Object.definePropotype(person ,"name",{configurable:false})
  函数:
    参数必须唯一 eg: function(a,a){}
    修改形参不会影响arguments eg:funtion(arg1){ arg1 = "bella";} 非严格模式下arguments[0]:bella,arguments被修改了
    不允许使用arguments.callee 和 arguments.caller
  不允许eval()在包含上下文中创建变量或函数
    一般都很少用eval,因为eval会将字符串当做js代码来执行,会改变上下文 eg:eval("var x = 10"); alert(x)这样是不允许的
  不允许this为null 或 undefined
  不允许使用with语句
  不允许使用八进制字面量

为什么使用严格模式:
消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
为未来新版本的Javascript做好铺垫。
"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。
另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。

你可能感兴趣的:(js 严格模式)