JavaScript高级语法学习之严格模式

1. 什么是严格模式?

严格模式是Javascript的一种工作模式,它可以让我们的代码更加安全、规范和高效。它是ES5中的新特性,在执行代码时开启严格模式只需要在代码前面添加 "use strict"; 声明,就可以在全局或局部作用域中启用该模式。

 "use strict";

1.1 严格模式的特点

启用严格模式后,一些不规范的语法将不能使用,比如不能使用未声明的变量,不能为只读属性赋值等。这将对代码质量的提升和调试而言都是极其重要的。以下是严格模式的特点:

变量必须先声明再使用

禁止 this 指向全局对象

禁止使用with语句

禁止对只读属性赋值

函数必须声明在顶层或函数内

禁止在函数内部遮盖arguments变量

参数禁止重名

禁止删除变量

eval()中引入的变量将不会自动成为当前函数的变量

通过以上限制,严格模式可以使代码更加健壮、减少出错的可能性。

2. 为什么要使用严格模式?

2.1 提高代码质量

开启严格模式后,一些不规范的代码会被禁止,避免了因为失误而出现的错误。在多人开发时,如果大家都启用了严格模式,可以强制大家遵循良好的编码规范,减少bug产生的可能性。另外,严格模式还可以增加代码的运行速度。

2.2 安全性提高

严格模式可以帮助我们发现程序中隐藏的因素和不安全的操作,并解决这些问题,大大降低了JavaScript代码被黑客攻击的可能性。例如使用eval会给黑客留下入侵的大门。但是在严格模式下,eval会无法对同时存在于上下文和局部作用域中的元素进行隐晦调用,从而避免了eval在代码注入中的危险行为。同时,几乎会避免使用不安全的JavaScript特性,使我们的JavaScript代码更加安全。

2.3 代码诊断和调试更容易

开启严格模式后,无法访问未声明的变量,这可以帮助我们减少因变量名错误而导致的bug。在函数调用中,参数必须按规则传递,这可以限制一些奇怪的和不安全的传递方式。一旦发生错误,严格模式可以帮助我们更快捷地进行诊断和调试,定位到问题所在。在代码组织和维护方面也有很大的帮助。

3. 怎么使用严格模式?

3.1 启用全局严格模式

要在全局作用域下启用严格模式,只需要在JavaScript文件或<script>标签的顶部添加"use strict";声明即可。

"use strict";

3.2 启用局部严格模式

如果需要在一个特定的函数中启用严格模式,也有相应的方法。只需要在函数的开头添加"use strict";声明即可。

function strictMode(){   "use strict";   // you can use strict mode in this function}

4. 严格模式的扩展内容

4.1 禁用arguments.caller和arguments.callee

在严格模式下,默认禁用了arguments.caller 和arguments.callee。在Javascript函数中,可以使用这两个东西来访问调用该函数和该函数自身的引用。但是,这两个东西带来了很大的性能问题,并且可以让代码变得更难以调试。所以在严格模式下,这两个引用都被禁用了。

function caller() {    "use strict";    console.log(arguments.caller);    console.log(arguments.callee);}

4.2 禁止给只读属性赋值

在严格模式下,禁止给只读属性赋值。对于只读属性,是不能修改的,这也是为了保证代码的运行安全性。

"use strict";var obj = {};Object.defineProperty(obj, "readOnly", {    value : 10,    writable : false});obj.readOnly = 123;   //error

4.3 禁止使用void操作符

在严格模式下,禁止使用void操作符。void是JavaScript中一个非常奇怪的操作符,它会对任何一个表达式进行求值,然后返回一个undefined值。当一个程序员在代码中使用void操作符时,通常是为了防止代码被重写。但是它的使用和理解都非常困难,容易出问题。因此在严格模式下禁止。

"use strict";console.log(void 0);   //  undefinedconsole.log(void(0));  //  undefinedconsole.log(void(1+2));    //  undefined

5. 结语

严格模式可以使我们写出更加健壮和规范的JavaScript代码。它提供了一种新的安全和可控的编程方式,可以实现代码质量提高、安全性提高、调试和诊断更容易的目的。因此,在深入学习JavaScript编程的时候,建议多多学习严格模式的相关内容,并灵活使用它。