ECMAScript 6.0

Posted Al_tair

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECMAScript 6.0相关的知识,希望对你有一定的参考价值。

ECMAScript 6.0

大家好呀!我是小笙,接下来我们来初步了解一部分大前端的内容。

ES6

ES6基本介绍

ECMAScript 6.0(以下简称 ES6)是 javascript 语言的下一代标准, 2015 年 6 月发布

ECMAScript 和 JavaScript 的关系(类似接口和类的关系):

ECMAScript 是 JavaScript 的规范/规则,JavaScript 是 ECMAScript 的一种实现


let变量

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script type="text/javascript">
		let name = "罗念笙";
		console.log("name",name); // 逗号:如果是对象,输出对象的完整信息(属性)
		console.log("name"+name); // 加号:如果是对象,只输出Object类型
		// 举例子
		// let l = new Object;
		// l.name = "罗念笙";
		// console.log("name",l); // name name: '罗念笙'
		// console.log("name"+l); // name[object Object]
		
		// let注意细节
		// 1. let 声明的变量有严格局部作用域 
		
			var gender = "男";
			let age = 18;
			console.log(gender); // 男
			console.log(age); // /18
		 
		console.log(gender); 	// 男
		console.log(age); // age is not defined
		
		// 2. let 只能声明一次, var 可以声明多次 
		let name = "张洛融"; // Identifier 'name' has already been declared
		
		// 3. let 不存在变量提升, var 存在变量提升
		console.log(x); 
		var x;
		
		console.log(y); // Cannot access 'y' before initialization
		let y;
	</script>
	<body>
	</body>
</html>

const 声明常量/只读变量

解构赋值<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 1. 常量在定义时,需要赋值 
			// 2. 常量赋值后不能修改
			const AGE; // Missing initializer in const declaration
			const PI = 3.14;
			PI = 5.6; // Assignment to constant variable
		</script>
	</head>
	<body>
	</body>
</html>

解构赋值

是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值(解构赋值是对赋值运算符的扩展 )

主要有两种形式: 数组解构和对象解构

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script type="text/javascript">
		// 数组解构 [ ]
		let arr = [1,2,3];
		let [x,y,z] = arr;
		console.log(x,y,z) // 1 2 3
		
		let [num1,num2,num3] = [100,200,300];
		console.log(num1,num2,num3); // 100 200 300
		
		// 对象解构  
		let obj = new Object;
		obj.name = "罗念笙";
		obj.age = 18;
		letname,age = obj; // 名称必须和属性名相同,但是顺序无所谓
		console.log(name,age); // 罗念笙 18
		
		function f1(name, age)  // 名称必须和属性名相同,但是顺序无所谓
			console.log(name,age)  // 罗念笙 18
		
		f1(obj);
	</script>
	<body>
	</body>
</html>

模板字符串

模板字符串使用反引号 ` 将字符串包裹

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 模板字符串使用反引号 ` 将字符串包裹
			// 1.可作为普通字符串
			// 2.可用来定义多行字符串,即可以将换行字符串原生输出
			let str1 = `for(int i=0;i<2;i++)
				System.out.println(i);
			`
			console.log(str1)	
			
			// 3.字符串插入变量和表达式, 使用 $
			let name = "罗念笙";
			let message = `姓名 : $name`
			let num1 = 34;
			let num2 = 66;
			let sum = `$num1+num2`;
			console.log(message); // 姓名 : 罗念笙
			console.log(sum); // 100
			
			// 4.字符串中调用函数
			function f1()
				return "f1被调用...";
			
			let controlF1 = `$f1()`;
			console.log(controlF1); // f1被调用...
		</script>
	</head>
	<body>
	</body>
</html>

对象相关新特性

声明对象简写

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 声明对象简写
			const age = 800; 
			const name = "孙悟空";
			let monster = name,age;
			console.log(monster) // name: '孙悟空', age: 800
		</script>
	</head>
	<body>
	</body>
</html>

对象方法简写

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 对象方法简写
			let monster2 =  
				name: "红孩儿", 
				age: 100, 
				sayHi()   // 传统方式: sayHi:function()
					console.log("name=", this.name, " age=", this.age);  // name= 红孩儿  age= 100
				,
			
			monster2.sayHi(); 
		</script>
	</head>
	<body>
	</body>
</html>

对象拓展运算符

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 对象拓展运算符
			let person = 
				name:"罗念笙",
				age:18,
				eat()
					console.log("eating....")
				
			
			// 浅拷贝
			let person2 =  person;
			person2.name = "张洛融";
			console.log(person.name); // 张洛融
			
			// 深拷贝
			let person3 = ...person;
			person3.name = "XXX";
			console.log(person3.name); // XXX
			console.log(person.name); // 张洛融
			
			// 合并对象(深拷贝)
			let personMessage = 
				gender:"女",
				hobby:"跑步"
			
			let wholeMessage = ...person,...personMessage;
			console.log(wholeMessage); // name: '张洛融', age: 18, gender: '女', hobby: '跑步', eat: ƒ
			person.name = "张洛";
			console.log(wholeMessage); // name: '张洛融', age: 18, gender: '女', hobby: '跑步', eat: ƒ
		</script>
	</head>
	<body>
	</body>
</html>

箭头函数(重要!!!)

  1. 箭头函数提供更加简洁的函数书写方式
  2. 基本语法是:(参数列表) => 函数体
  3. 箭头函数没有参数或有多个参数,要用 () 括起来,箭头函数只有一个参数, 可以省略()
  4. 箭头函数函数体有多行语句,用 包裹起来,表示代码块
  5. 函数体只有一行语句,并且需要返回结果时,可以省略 , 结果会自动返回
  6. 箭头函数多用于匿名函数的定义

箭头函数基本使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 传统函数
			let addSum = function(m,n)
				return m + n;
			
			console.log(addSum(6,4)); // 10
			// 1.箭头函数基本使用
			// 基本语法是:(参数列表) =>  函数体 
			let addSum2 = (m,n) =>
				return m + n;
			
			console.log(addSum2(3,4)); // 7
			// 箭头函数优化
			// 函数体只有一行语句,并且需要返回结果时,可以省略  , 结果会自动返回 
			let addSum3 = (m,n) => m + n;
			console.log(addSum2(3,90)); // 93
			
			// 2.可以把箭头函数当作形参传入(类似Java匿名内部类)
			function f(f4)
				console.log(f4(100));
			
			f(
				(n) => 
					return n * 12;
				
			)
			f(
				(n) => 
					return n - 12;
				
			)
			
			// 传统函数
			var f1 = function (n, m) 
				var res = 0 
				for (var i = n; i <= m; i++) 
					res += i 
				
				return res 
			
			console.log(f1(1, 10))  // 55
			// 3.箭头函数灵活使用 
			let f2 = (n, m) => 
				var res = 0 
				for (var i = n; i <= m; i++)  
					res += i 
				
				return res 
			;
			console.log(f2(1, 10)); // 55
		</script>
	</head>
	<body>
	</body>
</html>

箭头函数+对象解构

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 要求:在方法形参取出 monster 对象的 skill 属性 
			const monster = 
				name: "红孩儿",
				age: 100,
				skill: ['红缨枪', '三位真火']
			 
			// 传统方式
			function f1(monster) 
				console.log("skill=", monster.skill);
			
			f1(monster); 
			//箭头函数 
			let f2 = (skill) =>  
				console.log("skill=", skill); 
			
			// 1.f2传入对象monster,含有属性skill 
			// 2.f2形参是skill, 根据ES6的对象解构特性, 会把monster对象的skill属性赋给skill 
			// 3.对象解构的前提就是skill的 skill 和 monster 的 skill 属性名必须是一致的
			f2(monster); 
			
			// 箭头函数()=> + 解构
			let f3 = (age,name,skill) =>  // age,name,skill 顺序无要求
				console.log("skill=", skill, " age=", age, " name=", name);
			
			f3(monster);
		</script>
	</head>
	<body>
	</body>
</html>

以上是关于ECMAScript 6.0的主要内容,如果未能解决你的问题,请参考以下文章

ECMAScript 6.0 学习笔记

ES6 - ECMAScript 6.0(ES2015)

干货 | ECMAScript 6.0 新特性详解(附视频)

尚融宝06-ECMAScript基本介绍和使用

[ECMAScript] es6对函数做了哪些优化?

第二章 ECMAScript 和 TypeScript概述