在javascript中,严格模式是一个非常有用的特性,它可以让我们避免一些难以调试的低级错误,提高程序的可靠性和稳定性。
严格模式最大的特点就是限制了一些javascript的灵活性,让它更严谨。例如,在严格模式下,我们必须明确地声明变量,不能隐式地定义一个全局变量。来看下面的例子:
// 非严格模式下function foo() {var x = 1;y = 2; // 变量y未经过定义直接赋值,会自动创建一个全局变量}foo();console.log(x); // 输出1console.log(y); // 输出2// 严格模式下function bar() {'use strict';var x = 1;y = 2; // 抛出ReferenceError异常,因为y未定义}bar();console.log(x); // 抛出ReferenceError异常,因为x不是全局变量console.log(y); // 抛出ReferenceError异常,因为y也不是全局变量需要注意的是,在函数中声明全局变量其实并不是一件好事,因为它会污染全局命名空间,容易产生命名冲突和意外覆盖。所以使用严格模式可以更好地保护全局命名空间。
除了变量的定义机制,严格模式还对函数中的this有了更加严格的规则。在非严格模式下,函数在执行时如果没有指定对象作为它的上下文,那么函数内部的this默认指向全局对象(即window)。这在某些场合下是非常危险的,因为我们可能会意外地修改全局对象的属性。在严格模式下,函数内部的this不再默认指向全局对象,而是保持undefined。例如:
// 非严格模式下function foo() {console.log(this); // 输出全局对象window}foo();// 严格模式下function bar() {'use strict';console.log(this); // 输出undefined}bar();另外一个严格模式的改动是禁止使用八进制数字字面量。在javascript中,我们可以使用前导0表示一个八进制数字。例如:
console.log(010); // 输出8
但是,有时候我们会因为不小心加了一个前导0导致出现一些迷惑的问题。在严格模式下,这种做法就会被严格限制:
'use strict';console.log(010); // 抛出SyntaxError异常
其他还有许多细节方面的改动,这里就不一一列举了。总之,使用严格模式可以让我们更加清晰地控制代码的行为,减少一些潜在的错误和风险。我们可以通过在文件头部添加 'use strict'; 来启用该模式,也可以在函数内部添加。强烈建议在编写javascript代码时使用严格模式,让我们写出更加严谨的代码。
上一篇:javascript中值类型
下一篇:javascript中WScript用法









