什么是严格模式
- 严格模式是从 ES5 开始新增的一种方式,是采用具有限制性 JavaScript 变体的一种方式,从而使代码隐式地脱离 马虎模式/稀松模式/懒散模式 (sloppy) 模式;
- 设立 严格模式 的目的,主要有以下几个:
- 消除 Javascript 语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的 Javascript 做好铺垫;
开启严格模式
针对整个脚本文件
:将 “use strict” 放在脚本文件的第一行,则整个脚本都将以 严格模式 运行;
针对单个函数
:将 “use strict” 放在函数体的第一行,则整个函数以 严格模式 运行;
脚本文件的变通写法
:因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中;
严格模式的具体情况
-
没有使用 var 声明的变量不能使用
:在普通模式下,可以使用一个未声明的变量,此时该变量会成为一个全局变量,但是这种使用方式在严格模式下会报错;"use strict" a=10; // ReferenceError: a is not defined console.log(a) function sum(){ var a=10; console.log(a) } sum()
-
删除变量和不存在的属性会报错
:在普通模式下,删除变量或者不允许删除的属性虽然也会失败,但是是 静默失败 ,也就是说虽然失败了,但是不会给出任何提示;这样其实会产生很多隐藏问题,也给程序员的调错带来了难度;在严格模式下则会报错;"use strict" var i = 10; delete i; // SyntaxError: Delete of an unqualified identifier in strict mode. console.log(i); // 10
-
函数中相同的形参名会报错
:在普通模式下,函数中两个形参名相同也不会报错,只不过后面的形参所接收到的值会覆盖前面的同名形参;但是在严格模式下,相同的形参名会报错;"use strict" // SyntaxError: Duplicate parameter name not allowed in this context function a(b, b){ console.log(b); } a(1, 2)
-
对象不能有重名的属性
:正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值,严格模式下,这属于语法错误;"use strict"; var o = { p: 1, p: 2 }; // 语法错误
-
禁止八进制表示法
:正常模式下,整数的第一位如果是 0 ,表示这是八进制数,比如 010 等于十进制的 8;严格模式禁止这种表示法,整数第一位为 0 将报错;"use strict" var i = 010; // SyntaxError: Octal literals are not allowed in strict mode. console.log(i);
-
函数内部 this 值为 undefined
:在普通模式下,函数中的 this 在以函数的形式被调用时,指向全局对象;而在严格模式中,得到的值为 undefined;"use strict" function a(){ console.log(this); // undefined } a();
-
创设 eval 作用域
:- 正常模式下,Javascript 语言有两种变量作用域(scope):全局作用域和函数作用域;
- 严格模式创设了第三种作用域:eval 作用域;
- 正常模式下,eval 语句的作用域,取决于它处于全局作用域,还是处于函数作用域;
- 严格模式下,eval 语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于 eval 内部;
"use strict"; var x = 2; console.info(eval("var x = 5; x")); // 5 console.info(x); // 2
-
保留字
:为了向将来 Javascript 的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield;使用这些词作为变量名将会报错;"use strict"; var public = "hello world" // SyntaxError: Unexpected strict mode reserved word console.log(public);
正则表达式👉 JavaScript 中的应用
上一篇