ECMAScript 6.0

ECMAScript 6.0

    • ES6
      • ES6基本介绍
      • let变量
      • const 声明常量/只读变量
      • 解构赋值
      • 模板字符串
      • 对象相关新特性
        • 声明对象简写
        • 对象方法简写
      • 对象拓展运算符
      • 箭头函数(重要!!!)
        • 箭头函数基本使用
        • 箭头函数+对象解构

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

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;
		let{name,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>

你可能感兴趣的:(javaRoad,javascript,es6,前端)