ES5、ES6、ES7、ES8
ES5、ES6、ES7、ES8
ES5
- Strict Mode
在JS文件或是函数的顶部添加"use strict"即可启用严格模式。
"use strict";
function strict() {
"use strict";
}
在严格模式下运行脚本,不少导致提醒或bug行为的事情会抛出错误,例如:
(1)变量声明必须用var
在常规模式下,如果我们声明一个变量时省略了var关键字,解析引擎会自动将其声明为全局变量,但在严格模式下,会直接抛出异常,不会为我们转为全局变量
function strict() {
'use strict';
myVariable = 3; //Uncaught ReferenceError: myVariable is not defined
}
(2)禁止删除变量和对象中不可删除的属性
通过var声明的变量是不可删除的,在常规模式下,试图删除会静默失败,但在严格模式下会显式抛出异常;同样的,试图删除对象中不可删除的属性也会显式报错:
'use strict';
var a = 3;
delete a; //Uncaught SyntaxError: ...
delete Object.prototype; //Uncaught TypeError: ...
var animal = {};
Object.defineProperty(animal, 'name', {
configurable: false,
value: 'GOT'
});
delete animal.name; //Uncaught TypeError: ...
(3) 禁止对象属性重名
常规模式下,如果我们在对象中定义重复的属性,后定义的值会覆盖先定义的那个,ES5的严格模式规定,对象中不允许定义重复的属性,否则会显式报错。
'use strict';
var animal = {
name: 'BABY'
name: 'HUA'
};
console.log(person.name); // Uncaught SyntaxError: Unexpected identifier
(4)禁止函数参数同名
严格模式要求命名函数的参数必须唯一。
'use strict';
var b = 0;
function sum(a, a, c) { //Uncaught SyntaxError: ...
return a + b + c;
}
console.log(sum(1, 2, 3)); // Uncaught SyntaxError: Duplicate parameter name not allowed in this context
只能在脚本的*或者函数内部声明函数。在if语句中声明函数会报错:
'use strict';
if (true) {
function show() {
// ...
}
}
(5)禁止使用八进制数字
以0开头的八进制数字常常会让开发者迷惑,严格模式禁止以0开头的八机制表示法,另外,ES6已经支持新的语法标准,八进制以0o来表示,这样一来就与16进制的0x形成统一的语法格式
'use strict';
var a = 017; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.
var b = 0o17; //ES6 Octal syntax: 8 + 7 = 15
(6) 禁止使用with语句.
'use strict';
var name = 'GOT';
var animal = getAminal();
with(animal) { //Uncaught SyntaxError: Strict mode code may not include a with statement
name = newName;
}
(7)强制为eval创建新作用域
常规模式下,使用eval函数可能会影响当前作用域或全局作用域,给程序的运行结果带来不确定性,严格模式为JavaScript程序创建了第三种作用域:eval作用域。eval函数中的字符串只能在eval作用域内运行,其结果不会影响外层作用域,下面这两种形式都可以使eval在严格模式下运行
'use strict';
function show() {
eval("var x = 10");
alert(x); // Uncaught ReferenceError: x is not defined
}
show();
(8)eval和arguments
严格模式下,禁止使用eval和arguments作为标识符,也不允许读写他们的值;
'use strict';
var eval = 19; // Uncaught SyntaxError: Unexpected eval or arguments in strict mode
var arguments = 'hello';
(9)抑制this
非严格模式下,apply和call方法,null或undefined转成全局对象;严格模式下,函数的this始终是指定的值;
'use strict';
var a = 'hello';
function show() {
alert(this.a); // Uncaught TypeError: Cannot read property 'a' of null
}
show.call(null);
2. JSON对象
JSON.parse(text [, reviver])
JSON.parse接受文本(JSON格式)并转换成一个ECMAScript值。该可选的reviver参数是有带有key和value两个参数的函数,其作用于结果——让过滤和转换返回值成为可能。
4. Object对象方法扩展
5. 数组的扩展
6. Function的扩展
上一篇: 杨贵妃对大唐GDP的贡献
下一篇: 理发风波