Javascript的严格模式(Strict Mode)是ES5引入的一种新模式。它主要针对一些不规范的代码加强了规范性,以避免开发中一些隐形错误、提高代码质量和安全性。在Javascript中启用严格模式的方法是在代码开头添加"use strict";即可。
使用严格模式,将会导致Javascript的一些默认行为发生变化。
下面,我们将逐一讲解在使用Javascript严格模式下发生变化的几个方面:
变量声明
在非严格模式的Javascript中,如果我们不使用var或let等关键字来声明变量,那么Javascript会把这个变量默认为全局变量,而严格模式下的Javascript则不允许此种情况的发生。
示例1:
function test() {
x = 10;
console.log(x);
}
test();
在非严格模式下,x变量默认为全局变量,并输出10;而在严格模式下,此种方式会抛出一个Uncaught ReferenceError错误,因为x变量未定义。
示例2:
"use strict";
function test() {
x = 10;
console.log(x);
}
test();
在使用严格模式下,x变量未定义,会抛出一个ReferenceError错误。
严格模式下的函数
在严格模式下,函数的一些行为与非严格模式下会有所不同。
- 在非严格模式下,如果某个函数在全局作用域中被调用,那么其中的this变量默认指向全局对象(window);而在严格模式下,相同情况下,this默认为undefined,从而避免了一些潜在的问题。
示例3:
function test() {
console.log(this);
}
test();
在非严格模式下,将输出window对象;而在严格模式下,将输出undefined
- 在严格模式下,不允许一个函数内部this指向全局对象,除非通过函数的调用或者apply()、bind()、call()方法将this指向其他对象。
示例4:
"use strict";
function test() {
console.log(this);
}
test(); // 输出undefined
test.call("Hello"); // 输出"Hello"
只读属性
在严格模式下,对只读的属性进行赋值操作会抛出一个TypeError错误。
示例5:
"use strict";
var obj = {
prop : 10
}
Object.defineProperty(obj, "prop", {writable : false});
obj.prop = 20; // TypeError: Cannot assign to read only property 'prop' of object '#<Object>'
在这个例子中,我们定义了obj对象的prop属性为只读属性,但是在严格模式下尝试修改它的值,会抛出TypeError错误。
上面的这些仅仅是严格模式的一些变化,它不限于此。事实上,在严格模式下,还会有很多关键字、方法、特性都发生了变化。因此,使用Javascript严格模式能够更好的区分变量和函数作用域、提高代码健壮性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript的严格模式strict mode详细介绍 - Python技术站