Es6 学习笔记

let

块级作用域,只能使用在定义它的块里,在外面是访问不到的。

{
	let fruit = "apple"
	console.log(fruit);//apple
}
console.log(fruit);//fruit is not defined

const

声明一个恒量,这样就不能给这个恒量重新分配新的值。其限制的是给恒量分配值的动作并不是限制里面的值。

const fruit = 'apple'
console.log(fruit);
const fruit = 'orange'
console.log(fruit);//Identifier 'fruit' has already been declared
const fruit = []
fruit.push('apple')
console.log(fruit);
fruit = [] //Assignment to constant variable. 不能重新分配fruit的值

解构

function breakfast(){
	return ['apple','orange','mulik']
}
let [a,b,c] = breakfast()
console.log(a,b,c);//apple orange mulik
function breakfast(){
	return {man:'tom',woman:'may'}
}
let {man:man,woman:woman} = breakfast()//后面的man表示的是自己定义的名字,前面的man表示的是对象的属性
console.log(man,woman);//tom may
  • 字符串拼接(使用字符模板)
let dessert = 'apple',drink = 'mulik';
let breakfast = '今天的早餐是'+dessert+'和'+drink+'!'
console.log(breakfast);//今天的早餐是apple和mulik!

let breakfast1 = `今天的早餐是${dessert}和${drink}!`
console.log(breakfast1);//今天的早餐是apple和mulik!
  • 使用标签
let dessert = 'apple',
	drink = 'mulik';
let breakfast = kitchen `今天的早餐是${dessert}和${drink}!`;
//strings是模板字符串里的每一部分字符 values是里面的值(dessert,drink)
function kitchen(strings, ...values) {
	console.log(strings); //["今天的早餐是", "和", "!", raw: Array[3]]
	console.log(values); //["apple", "mulik"]
	let result = '';
	for (var i = 0; i < values.length; i++) {
		result += strings[i];
		result += values[i];
	}
	result += strings[strings.length - 1];
	return result;
}
  • 判断字符串的功能
let dessert = 'apple',
	drink = 'mulik';
let breakfast = `今天的早餐是${dessert}和${drink}!`;
console.log(breakfast.startsWith('今天'));//判断是否以“今天”开头 结果为true
console.log(breakfast.endsWith('!'));//判断结尾
console.log(breakfast.includes('早餐'));//判断是否包含

函数设置默认值

如果不设置值就会使用默认的值

... 操作符

  • 展开
let fruits = ['apple','orange'],foods = ['bread',...fruits];
console.log(fruits);//["apple", "orange"]
console.log(...fruits);//apple orange
console.log(foods);//["bread", "apple", "orange"]
  • 剩余操作符,一般会用在函数参数里面
function breakfast(dessert,drink,...foods){
	console.log(dessert,drink,...foods);//出了dessert,drink,其余的参数会放到foods这个数组里面
}
breakfast('apple','orange','tea','piazz')
  • 设置对象参数
function breakfast(dessert,drink,{location,restaurant}={}){
	console.log(dessert,drink,location,restaurant);//pick mulik 成都 火锅
}
breakfast("pick","mulik",{location:'成都',restaurant:'火锅'})

name属性

  • 得到函数名字
function breakfast(dessert){
}
console.log(breakfast.name);//breakfast
let drink = function mulik(dessert){
}
console.log(drink.name);//mulik

Arrow function 箭头函数

  • 写法
//ES6
let breakfast = (dessert, drink) => {
	return dessert + drink
};
//原始写法
var breakfast = function breakfast(dessert, drink) {
	return dessert + drink
}
  • []的使用
let food = {};
let drink = 'hot drink';
food.dessert = 'bread';
food[drink]='tea';//使用变量名或者有空格的情况下使用[]
console.log(food);//Object {dessert: "bread", hot drink: "tea"}

Object Assign

  • 把一个对象里的属性赋值给另外一个对象
let food = {};
Object.assign(food,{drink:'tea'},{drink:'mulik'})//后面的值会覆盖前面的值
console.log(food);//Object {drink: "mulik"}

Obgect.setPrototypeOf

  • 创建对象之后改变其Prototype
let breakfast = {
	getDrink(){
		return 'tea';
	}
}
let dinner = {
	getDrink(){
		return 'mulik'
	}
}
let sunday = Object.create(breakfast);//基于breakfast创建sunnday
console.log(sunday.getDrink());//tea
console.log(Object.getPrototypeOf(sunday)===breakfast);//true
Object.setPrototypeOf(sunday,dinner);
console.log(sunday.getDrink());//mulik
console.log(Object.getPrototypeOf(sunday)===dinner);//true

_ proto _

  • 可以得到或者设置对象里的Prototype
let breakfast = {
	getDrink(){
		return 'tea';
	}
}
let dinner = {
	getDrink(){
		return 'mulik'
	}
}
let sunday = {
	__proto__ :breakfast
}
console.log(sunday.getDrink());//tea
console.log(Object.getPrototypeOf(sunday)===breakfast);//true
sunday.__proto__ = dinner
console.log(sunday.getDrink());//mulik
console.log(Object.getPrototypeOf(sunday)===dinner);//true
  • 重新定义覆盖
let breakfast = {
	getDrink(){
		return 'tea';
	}
}
let dinner = {
	getDrink(){
		return 'mulik'
	}
}
let sunday = {
	__proto__ :breakfast,
	getDrink(){
		return super.getDrink()+'bear'
	}
}
console.log(sunday.getDrink());//teabear

Iterators

  • 迭代器(轮流交换);每一次执行的时候会返回一个对象{value:xxx,done:true/false},如果done为true则结束;其中还有一个next的方法每一次执行的时候就会返回一个对象。如果没有可调用的则
function chef(foods){
	let i = 0;
	return {
		next(){
			let done = (i >= foods.length)
			let value = !done ? foods[i++]:undefined;
			return {
				value:value,
				done: done
			}
		}
	}
}
let wanger = chef(['eggs','meat'])
console.log(wanger.next());//Object {value: "eggs", done: false}
console.log(wanger.next());//Object {value: "meat", done: false}
console.log(wanger.next());//Object {value: undefined, done: true}
  • Generators 可以生成迭代器
function* chef(foods){
	for (var i = 0; i < foods.length; i++) {
		yield foods[i];
	}
}
let wanger = chef(['eggs','meat']);
console.log(wanger.next());//Object {value: "eggs", done: false}
console.log(wanger.next());//Object {value: "meat", done: false}
console.log(wanger.next());//Object {value: undefined, done: true}
  • classes 类
class Chef {
	constructor(food) {
		this.food = food;
	}
	cook() {
		console.log(this.food);
	}
}
let wanger = new Chef('apple');
wanger.cook();//apple

  • 类里面的getter setter
class Chef {
	constructor(food) {
		this.food = food;
		this.dish = [];
	}
	get menu(){
		return this.dish;
	}
	set menu(dish){
		this.dish.push(dish)
	}
	cook() {
		console.log(this.food);
	}
}
let wanger = new Chef();
console.log(wanger.menu = 'apple');
console.log(wanger.menu = 'orange');
console.log(wanger.menu);//get ["apple", "orange"]
  • 静态方法static
class Chef {
	constructor(food) {
		this.food = food;
		this.dish = [];
	}
	get menu(){
		return this.dish;
	}
	set menu(dish){
		this.dish.push(dish)
	}
	static cook(food) {
		console.log(food);
	}
}
Chef.cook('apple')
  • 继承
class Person {
	constructor(name,birthday) {
		this.name = name;
		this.birthday = birthday;
	}

	intro(){
		return `${this.name},${this.birthday}`;
	}
}
class Chef extends Person{
	constructor (name,birthday){
		super(name,birthday);
	}
}
let wanger = new Chef('wanger','1998');
console.log(wanger.intro());//wanger,1998

set

里面不能有重复的内容

let dessert = new Set('apple');
dessert.add('s')
console.log(dessert);
console.log(dessert.size);//3
console.log(dessert.has('p'));//true
dessert.delete('s');
console.log(dessert);//Set {"a", "p", "l", "e"}
dessert.forEach(dessert =>{
	console.log(dessert);
});
dessert.clear();//清空
console.log(dessert);

map

let food = new Map(); 
let fruit = {}, cook = function () {},dessert = '甜点'; 
food.set(fruit,'orange'); 
food.set(cook,'apple'); 
food.set(dessert,'bread'); 
console.log(food); 
console.log(food.size); 
console.log(food.get(fruit)); 
console.log(food.get(cook)); 
food.delete(dessert); 
console.log(food.has(dessert)); 
food.forEach((value,key) => {
	console.log(`${key}=${value}`);//[object Object]=orange function () {}=apple
});
food.clear();
console.log(food);

模块 Module

//在模块文件中
let fruit = 'apple'
let dessert = 'orange'
//需要导出的东西(函数,类,都可以)
export {fruit,dessert};

//导入(引入模块)
import {fruit,dessert} from '路径'
//引入全部
import * as chef from '路径'
console.log(chef.fruit);//apple
//在模块文件中
let fruit = 'apple'
let dessert = 'orange'
function dinner(fruit,dessert){
	console.log(`今天的晚餐:${fruit}和${dessert}`);
}
//需要导出的东西(函数,类,都可以) as重命名
export {fruit,dessert,dinner as supper};

//导入(引入模块)as重命名
import {fruit,dessert,supper as dinner} from '路径'
dinner(fruit,dessert)//今天的晚餐:apple和orange
//引入全部
import * as chef from '路径'
console.log(chef.fruit);//apple
  • 默认导出
//在模块文件中
let fruit = 'apple'
let dessert = 'orange'
//默认要导出的 方法一
export default function dinner(fruit,dessert){
	console.log(`今天的晚餐:${fruit}和${dessert}`);
}
//默认要导出的 方法二
function dinner(fruit,dessert){
	console.log(`今天的晚餐:${fruit}和${dessert}`);
}
export {dinner as default}

//导入默认模块可以直接进行重命名
import chef from '路径'
chef('apple','orange')//今天的晚餐:apple和orange
posted @ 2017-08-15 11:12  加岐  阅读(131)  评论(0)    收藏  举报