1. 变量必须使用var声明,杜绝不小心将本地变量声明成一个全局变量
在常规模式下,如果我们声明一个变量时省略了var关键字,解析引擎会自动将其声明为全局变量,但在严格模式下,会直接抛出异常,不会为我们转为全局变量:
message = ‘hello world‘; var color = ‘red‘; delete color;
2. 禁止函数参数重名
3. 禁止对象属性重名
‘use strict‘; //it should throw a SyntaxError in ES5 strict mode var person = { name: ‘Scott‘ name: ‘John‘ }; console.log(person.name);
4.禁止使用八进制数字
以0开头的八进制数字常常会让开发者迷惑,严格模式禁止以0开头的八机制表示法,另外,ES6已经支持新的语法标准,八进制以0o来表示,这样一来就与16进制的0x形成统一的语法格式:
‘use strict‘; var a = 017; //Uncaught SyntaxError: ... var b = 0o17; //ES6 Octal syntax: 8 + 7 = 15
5. 强制为eval创建新作用域
常规模式下,使用eval函数可能会影响当前作用域或全局作用域,给程序的运行结果带来不确定性,严格模式为JavaScript程序创建了第三种作用域:eval作用域。eval函数中的字符串只能在eval作用域内运行,其结果不会影响外层作用域,下面这两种形式都可以使eval在严格模式下运行:
‘use strict‘; eval("var a = 1;"); console.log(a); //Uncaught ReferenceError: a is not defined //or eval("‘use strict‘; var b = 3;"); console.log(b); //Uncaught ReferenceError: b is not defined
6. 禁止对eval和arguments做非法操作
以下几种使用方式都会抛出语法错误:
使用var声明;
赋予另一个值:
尝试修改包含的值,如使用++;
用作函数名;
用作命名的函数参数;
7.禁止使用arguments.callee
8.禁止this指向全局
9. 函数必须声明在整个脚本或函数层面
‘use strict‘; if (true) { function doSomething() { console.log(‘1‘); } } else { function doSomething() { console.log(‘2‘); } } for (var i = 0; i < 5; i++) { function doSomething() { console.log(‘3‘); } } doSomething(); //Uncaught ReferenceError: doSomething is not defined
时间: 2024-09-14 13:33:43