ES5中“严格模式”和”非严格模式“

 

 

严格模式     非严格模式    
禁止使用with语句     允许使用with语句    
所有变量要先声明     使用为声明的变量将隐式声明为全局变量    
函数(非方法)中的this是undefined     this是全局对象    
call()和apply()传入的第一个值不会被转换     call()和apply()传入的第一个值如果是null和undefined,则会被全局对象取代,如果是原始值则转换为对应的包装对象    
给只读属性和不可扩展的对象创建新成员将抛出类型错误异常     只是简单的操作失败    
传入eval()的代码不能在定义变量和函数     变量和函数定义在eval()创建的新作用域中
函数中的arguments对象拥有传入函数值的静态副本      
delete后跟非法标识符将抛出类型错误异常         返回false   
delete删除不可配置的属性将抛出类型错误异常     返回false    
在对象直接量中定义多个同名属性将产生语法错误     不报错    
函数声明存在多个同名的参数将产生语法错误     不报错
不允许使用八进制直接量     某些实现是允许的    
eval和arguments当做关键字,并且不允许更改      
限制了对栈的检测能力,arguments .caller和arguments.callee将抛出类型错误异常

测试是否开启严格模式

var hasStrictMode = function() {
    "use strict";
    return this === undefined
}

 

posted @ 2020-03-18 02:19  sjzhen  阅读(71)  评论(0编辑  收藏  举报