严格模式探究

   探究一下严格模式,也是我个人一直推崇的,简单记录一下。

 

    在ECMAScript5引入了strict mode

 

    -----------   方便更快地调试出错误

 

  • 如何使用
"use strict";

 

  •  兼容性:

 http://caniuse.com/#feat=use-strict

 


严格模式探究_第1张图片
 

  •  去除with
        当with语句出现在严格模式下,会被认为是非法而抛出异常。
         
 
  •  防止意外的全局变量

          变量在赋值之前必须声明,严格模式下会抛出异常。

 

        
 

  • 杜绝重复
       对象定义了重复的属性或者函数的参数名重复

      
 
  • 取消this的强制转换

    当this为null或者undefined的时候,不会强制转换为全局对象,必须赋值

 

    同样构造函数没有new 也抛错

 

window.color ="red";
function test(){
    alert(this.color);
}

 

    
 

 

  • 更安全的eval

    在eval中的语句声明变量:仍然呆在里面

 

(function(){
     eval("var i = 1;");

     //严格模式i没有声明,抛错
     //非严格,i为1
     alert(i);
});

 

     换种方式:

 

(function(){
     var result = eval("var i=1,j=2;i+j");

     //严格和非严格多是一样
      alert(result);
})

 

  •  eval不能作为字符串来做标识符(变量、函数名、参数名  )

        
 

 

  • 函数声明无法嵌套在语句或块中,只能显示在顶级货直接显示在函数体中

     

function test(){
	for(var i=0;i<10;i++){
			
		function getTest(){
			
		};
			
	}
}

      

     
 

 

  •  字符串“arguments”不能用作标识符(变量或函数名、参数名等)

      
 

  •  修改arguments这个对象里面的某些值的问题
function test(num){
     arguments[0] = 1;
     console.log(num);

     //非严格模式1
     //严格模式10,因为arguments对象只是一个本地副本

}

test(10);

 

 

  • 八进制数say NO

    
 

 

  •  未来保留关键字无法使用
  1. implements
  2. interface
  3. let
  4. package
  5. private
  6. protected
  7. public
  8. static
  9. yield

 

 

     推荐编写 严格模式的方式
 
;(function(){
     "use strict";

      function getXXX(){

      } 

      function setXXX(){

      }

})();
 
 
扩展阅读
 
     http://technet.microsoft.com/zh-cn/sysinternals/br230269(v=vs.94)
 
     https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode
 
 
 
 

你可能感兴趣的:(use,ECMAScript,strict,严格模式,5)