JavaScript严格模式和非严格模式区别

  1. 严格模式下,不允许使用with 
  2. delete运算符后跟随非法标识符(即delete 不存在的标识符),会抛出语法错误; 非严格模式下,会静默失败并返回false
  3. 严格模式中,对象直接量中定义同名属性会抛出语法错误; 非严格模式不会报错
  4. 严格模式中,函数形参存在同名的,抛出错误; 非严格模式不会
  5. 严格模式不允许八进制整数直接量(如:023)
  6. 严格模式中,arguments对象是传入函数内实参列表的静态副本;非严格模式下,arguments对象里的元素和对应的实参是指向同一个值的引用
  7. 严格模式中 eval和arguments当做关键字,它们不能被赋值和用作变量声明
  8. 严格模式会限制对调用栈的检测能力,访问arguments.callee.caller会抛出异常
  9. 严格模式 变量必须先声明,直接给变量赋值,不会隐式创建全局变量
  10. 严格模式中 call apply传入null undefined保持原样不被转换为window

来张图,更清楚:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值