js严格模式总结

使用方式:'use strict';

  • 为某个script标签开启严格模式
  • 为某个函数开启严格模式

严格模式有哪些不同呢

  1. 将拼写错转成异常
    • 未声明的变量不能赋值。可以防止意外创建全局变量。
    • 严格模式会使引起静默失败(silently fail,注:不报错也没有任何效果)的赋值操抛出异常. 例如, NaN 是一个不可写的全局变量. 在正常模式下, 给 NaN 赋值不会产生任何作用; 开发者也不会受到任何错误反馈. 但在严格模式下, 给 NaN 赋值会抛出一个异常. 任何在正常模式下引起静默失败的赋值操作 (给不可写属性赋值, 给只读属性(getter-only)赋值赋值, 给不可扩展对象(non-extensible object)的新属性赋值) 都会抛出异常。
    • 在严格模式下, 试图删除不可删除的属性时会抛出异常(之前这种操作不会产生任何效果)。
    • 重名属性,SyntaxError。
    • 重名参数,SyntaxError。
    • 进制八进制数字语法。
    • 进制为原始值设置属性,TypeError。
  2. 简化变量使用
    • 禁用with
    • eval不再为上层范围引入新变量
    • 严格模式禁止删除声明变量
  3. 让eval和arguments变得简单
    • 名称 eval 和 arguments 不能通过程序语法被绑定(be bound)或赋值. (成为了关键字)
    • 参数的值不会随 arguments 对象的值的改变而变化。函数的 arguments 对象会保存函数被调用时的原始参数。
    • 不再支持 arguments.callee。
  4. 安全的Javascript

    • fun.caller和fun.arguments不再使用
    • arguments.callee
    • 函数单独调用时this不默认指向window,用bind绑定this时不进行包装。
      "use strict";
      function fun() { return this; }
      console.assert(fun() === undefined);//true
      console.assert(fun.call(2) === 2);//true
      console.assert(fun.apply(null) === null);//true,正常模式下返回window
      console.assert(fun.call(undefined) === undefined);//true,正常模式下返回window
      console.assert(fun.bind(true)() === true);//true
  5. 为未来的ECMAScript版本铺平道路

    • 一部分字符变成了保留的关键字。这些字符包括implements, interface, let, package, private, protected, public, static和yield。在严格模式下,你不能再用这些名字作为变量名或者形参名。
    • 严格模式禁止了不在脚本或者函数层面上的函数声明。(在if和for中不能声明函数)
      Mozilla MDN
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值