严格模式

本文最后更新于:1 天前

什么是严格模式

严格模式是在 ECMAScript5(ES5)中引入的,在严格模式下,JavaScript 对语法的要求会更加严格,一些在正常模式下能够运行的代码,在严格模式下将不能运行。

添加严格模式,主要有以下几个目的:

  • 消除 JavaScript 语法中一些不合理、不严谨的地方;
  • 消除代码中一些不安全的地方,保证代码的安全运行;
  • 提高 JavaScript 程序的运行效率;
  • 为以后新版本的 JavaScript 做好铺垫。

将过失错误转成异常

  1. 严格模式下无法再意外创建全局变量
    直接写一个变量a=1,在宽松模式下,浏览器会帮我们定义一个全局变量,但是这样的行为太出格了,所以严格模式下,此类行为均认为是异常错误。
  2. 静默失败的操作都会抛出异常
    诸如修改不可写属性,删除不可删除属性,给全局属性进行无意义的赋值此类的行为虽然是错误的行为,但是浏览器不会显性抛出错误,在严格模式下,此类行为全部会抛出异常。
  3. 函数参数重复会被当做异常抛出
    使用严格模式后重复参数会抛出以下错误,
    Uncaught SyntaxError: Duplicate parameter name not allowed in this context
    而在宽松模式下,是不会报错的。
  4. 0开头的八进制写法被禁止
    使用0开头的诸如0644此类的进制写法都会被严格模式认为错误,想要表达八进制,在es6中提供了以0o开头的的表达形式,如0o640
  5. 原始类型数据的属性不能被赋值
    诸如给数字的某个属性赋值的操作,在严格模式下是不被允许的
    (12).hello = 0
  6. with被禁用
    这玩意就该被禁用,不确定的代码使用with太危险了。
  7. 禁止删除声明变量
    声明的变量不能直接删除
  8. arguments内部的值不会随使用的改变而改变,arguments.callee不可使用
    "use strict";
    function test(a,b,c){
        a=1;b=2;c=3
        console.log(a,b,c,arguments)
    }
    test(4,5,6)//输出1,2,3,[4,5,6,callee]
    function test2(){
        console.log(arguments.callee)
    }
    test2()//TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!