JavaScript中有严格模式(strict mode)这个概念,它可以让JS代码更加规范、严谨,减少错误的发生。严格模式在进行JS代码开发时非常实用,该模式下提供了大量的限制,可以避免一些常见的编程错误以及提高代码的可读性。
那么,什么是严格模式中的限制呢?下面就来一一介绍。
1. 不允许使用未声明的变量
在非严格模式中,可以直接给未声明的变量赋值。例如下方代码:
message = "Hello, world!";console.log(message);
而在严格模式中,会抛出ReferenceError(引用错误):
"use strict";message = "Hello, world!"; // ReferenceError
严格模式下,必须使用var、let、const等关键字来声明变量,避免出现未声明的情况。
2. 不允许重复的属性名或参数名
在非严格模式下,对象的属性名或者函数的参数名可以重复,例如:
var object = {name: "Alice",name: "Bob"};console.log(object.name); // "Bob"function test(name, name) {console.log(name); // 20}test(10, 20);而在严格模式下,重复的属性名或参数名会导致语法错误:
"use strict";var object = {name: "Alice",name: "Bob" // SyntaxError};function test(name, name) { // SyntaxErrorconsole.log(name);}3. 禁止使用eval函数
eval函数是一种非常危险的函数,它可以执行任何字符串形式的代码。由于这个函数的危险性,严格模式下禁止使用eval函数。例如下面的代码:
eval("var message = 'Hello, world';");console.log(message);在严格模式下,使用eval会抛出SyntaxError(语法错误):
"use strict";eval("var message = 'Hello, world';"); // SyntaxErrorconsole.log(message);4. 禁止删除不可删除的属性
在JavaScript中,有些属性是不允许被删除的,例如对象原型上的属性。在非严格模式下,尝试删除不可删除的属性会默默失败,不会抛出错误。而在严格模式下,尝试删除不可删除的属性会抛出TypeError(类型错误)异常。例如下面的代码:
"use strict";delete Object.prototype; // TypeError
5. 禁止函数参数出现同名属性
在非严格模式下,函数参数名可以与函数内部的变量名重复,例如:
function test(name) {var name = "Alice";console.log(name);}test("Bob"); // "Alice"而在严格模式,函数参数名和函数内部变量名的重复将导致语法错误:
"use strict";function test(name) {var name = "Alice"; // SyntaxErrorconsole.log(name);}test("Bob");6. 禁止八进制的数字字面量
在非严格模式下,JavaScript会将数字字面量中以0开头的数字当做八进制数来解析。例如下面的代码:
var num = 01234; // 668十进制console.log(num);
而在严格模式下,八进制数字字面量将被视为语法错误:
"use strict";var num = 01234; // SyntaxErrorconsole.log(num);
7. 禁止使用with语句
with语句可以使代码更加简洁,但同时也会带来很多问题。因此,在严格模式下,禁止使用with语句。例如下面的代码:
"use strict";var person = {name: "Alice",age: 20};with(person) {console.log(name);console.log(age);}该代码会抛出SyntaxError异常。
总结来看,严格模式下提供了很多的限制,可以使JS代码更加符合标准、可读性更强,减少开发时出现错误的概率。建议在编写JavaScript的时候将严格模式打开。
上一篇:css指定文字设置样式
下一篇:css按网页大小缩放









