欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES5、ES6、ES7、ES8

程序员文章站 2022-06-12 20:46:07
...

ES5、ES6、ES7、ES8

ES5

  1. 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的扩展

相关标签: javascript js