块级作用域let

if(true){

let fruit = ‘apple’;

}

consoloe.log(fruit);//会报错,因为let只在if{ }的作用域有效,也就是块级作用域

恒量const

const fruit = ‘apple’;//其实就是fruit这个变量已经指定了apple这个位置,二次赋值其实就是改变他的引用,所以会报错,

console.log(fruit);

const fruit = ‘lemo’;

console.log(fruit);//会报错,const定义的变量不能二次定义,而且const也是块级作用域,不会变量提升

const arr = [ ];

arr.push(‘apple’);

arr.push(‘lemo’);

arr = [ ];//会报错

解构数组

function breakfast(){

return [‘cake’,’coffee’,’apple’];

}

let [dessert,drink,fruit] = breakfast();//会将dessert = ‘cake’,drink = ‘coffee’,fruit = ‘apple’,这就是数组解构,会将对应下标的值赋值

console.log(dessert,drink,fruit);

解构对象

function breakfast(){

return  { dessert:’cake’,drink:’coffee’,fruit:’apple’ };

}

//解析对象主要也是用于赋值,对象之间的赋值

let { dessert1:dessert, drink1:drink, fruit1:fruit } = breakfast();

console.log(dessert, drink, fruit );

模板字符串

let dessert = ‘cake’, drink = ‘coffee’;

let breakfast = “今天的早餐是” + drink + “和” + cake;

console.log(breakfast);

//字符串模板使用变量要用${ 变量名 }来表示,常用语HTML的输出,这样` content `,content的内容的格式都不会变化

let breakfast_1 = `今天的早餐是${cake}和${coofee}`;

console.log(breakfast_1);

带标签的模板字符串

let dessert = ‘cake’,drink = ‘coffee’;

let breakfast = kitchen`今天的早餐是${ dessert }和${ drink }`;

function kitchen(strings,…values){//kitchen是标签,再以标签名做函数名,里面的内容就可以作为参数传递过来了

//console.log(strings);

//console.log(values);

//strings里存放的是breakfast里面的字符串,values存放的是变量,strings和values都是数组

let result = ‘’;

for(let i = 0;I < values.length;i++){

result += strings[i];

result += values[i];

}

result += strings[strings.length -1];

return result;//result返回的就是kitchen的那一段话

}

判断字符串里是否包含其他字符串

let str = “今天吃的是apple”;

str.startWith(‘今天’);//返回true,判断str是否是以今天开头

str.endsWith(‘le’);//true,判断str是否是以le结尾

str.includes(‘apple’);//true,判断str是否含有apple这个字符串

默认参数

function breakfast(dessert = “cake”,drink = “coffee”){//设置默认参数

return `${dessert} ${drink}`;

}

console.log( breakfast() );//cake coffee

展开操作符-Spread(…)

let fruits = [‘apple’,’lemo’], foods = [‘cake’,…fruits];

console.log(fruits);  //返回的是数组[‘apple’,’lemo’]

console.log(…fruits);  //返回的两个字符串apple 和 lemo

console.log(foods);  //[‘cake’,’apple’,’lemo’];

剩余操作符(还是…)

function breakfast(dessert,…foods){//多出来的参数都会放在foods里面

console.log(dessert,foods);

}

breakfast(‘cake’,lemo’,’coffee’);//打印的是cake,[‘lemo’,’coffee’],因为lemo和coffee都放在了foods这个数组里

解构参数

function breakfast(dessert,drink,{location,restaurant} = { } ){//其实就是利用解构对象来做参数传递

console.log(dessert,drink,location,restaurant);

}

breakfast(‘cake’,’coffee’,{ location:”wuhan”,restaurant:”baijingyuan” } );

函数的名字-name属性

function foo1(){ }

let foo2 = function(){ }

let foo3 = function foo4(){ }

console.log(foo1.name,foo2.name,foo3.name);//foo1,foo2,foo4

箭头函数

// 函数名             参数              方法实现

let breakfast = (dessert) => { return dessert; };

翻译成普通函数:

var breakfast = function breakfast(dessert){

return dessert;

}

对象表达式

let dessert = ‘cake’ , drink = ‘coffee’;

//全写

let food = {

dessert:dessert,

drink:drink,

breakfast:function(){ }

}

//简写

let food = {

dessert,

drink,

breakfast(){ }

}

对比两个值是否相等Object.is(var1,var2)

把对象的值复制到另一个对象Object.assign()

let breakfast = { };

Object.assign( breakfast,{ dessert:’cake’,drink:’coffee’ } );

console.log(breakfast);//dessert:’cake’,drink:’coffee’

设置对象的prototype

//Object.getPrototypeOf()

//Objeect.setPrototypeOf()

let breakfast={

getDrink(){

return ‘coffee’;

}

};

let dinner = {

getDrink(){

return ‘beer’;

}

};

let drink = Object.create(breakfast);

drink.getDrink();//coffee

console.log( Object.getPrototypeOf(drink) === breakfast);//true

Object.setPrototypeOf(drink,dinner);

drink.getDrink();//beer

console.log(Object.getPrototyprOf(drink) === dinner);//true

__proto__

let breakfast={

getDrink(){

return ‘coffee’;

}

};

let dinner = {

getDrink(){

return ‘beer’;

}

};

let drink ={

__proto__:breakfast,

}

drink.getDrink();//coffee

console.log( Object.getPrototypeOf(drink) === breakfast);//true

drink.__proto__ = dinner;

drink.getDrink();//beer

console.log(Object.getPrototyprOf(drink) === dinner);//true

super

let breakfast={

getDrink(){

return ‘coffee’;

}

};

let dinner = {

getDrink(){

return ‘beer’;

}

};

let drink = {

__proto__:breakfast,

getDrink(){

return super.getDrink() + ‘,milk’;

}

}

drink.getDrink();//coffee,milk

迭代器

生成器Generators

function* chef(){

yield ‘apple’; //yield就是需要迭代的变量

yield ‘lemo’;

}

function* foods(foodArr){

for(let i = 0;I < foodArr.length;i++){

yield foodArr[i];

}

}

let wanghao = chef();

console.log(wanghao.next());//apple

console.log(wanghao.next() );//lemo

console.log(wanghao.next() );//undefined

class

class Chef {

constructor(food){

//当使用new去生成一个对象的时候会自动调用该方法

//我们也可以使用该方法对这个类进一些初始化

this.food = food;

}//注意此处没有逗号

cook(){

console.log(this.food);

}

}

let wanghao = new Chef(‘apple’);

wanghao.cook();

get与set

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 wanghao = new Chef();

wanghao.menu = ‘apple’;

wanghao.menu = ‘lemo’;//会自动调用set方法

console.log(wanghao.menu);//会自动调用get方法

静态方法static

//不需要实例化类就可以使用的方法

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);

}

static cook(food){

console.log(food);

}

}

Chef.cook(‘apple’);//不需要class的实例化对象,直接用类名就可以调用static方法

继承extends

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 wanghao = new Chef(‘王浩’,’1995-07-11’) );

wanghao.intro();//王浩,1995-07-11

Set

let dessert = new Set(‘apple’,’lemo’);//此时dessert = { ‘apple’,’’lemo’ }

dessert.add(‘ice’);//此时dessert = {'apple’,’lemo’,’ice’ }

dessert.add(‘ice’);//Set里面的元素不允许有重复的,所以此时的dessert = { ‘apple’,’lemo’,’ice’}

console.log(dessert.size);// 3,size是deseert的长度

console.log(dessert.has(‘apple’);//true,has(str)是判断是否有这个元素

console.log(dessert.delete(‘apple’);//delete(str)是删除元素str这个元素

dessert.forEach(dessert => {

console.log(dessert);

});//forEach()是循环里面的元素

dessert.clear();//清空里面的元素

Map

let food = new Map();

let fruit = { }.cook =function(){ },dessert = ‘甜点’;

food.set(fruit,’lemo’);// Map{ Object {} => ‘lemo’

food.set(dessert,’pie’);//‘甜点’ = ‘pie’

food.size;//2

food.get(fruit);//lemo

food.delete(dessert);

food.has(dessert);//false

food.forEach((value,key) =>{

console.log(`${ value },${ key}`);

});

food.clear();

Moudle(模块)

// Person.js

let name = ‘王浩’,year = 24;

export { name, year as old };//重命名year为old

//Chef.js

import { name,old as age } from ‘./Person.js’;//文件所在的相对路径,重命名old为age

//或者 import * as person from ‘./Person.js’;peroson.js里面所有的导出都会放chef对象中

console.log(name,age);

重命名导出与导入

导出与导入默认

ES6特性以及代码demo的更多相关文章

  1. jdk8十大特性并代码demo(转)

    一.十大特性 1.Lambda表达式 2.Stream函数式操作流元素集合 3.接口新增:默认方法与静态方法 4.方法引用,与Lambda表达式联合使用 5.引入重复注解 6.类型注解 7.最新的Da ...

  2. 最常用的ES6特性(转)

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  3. 最常用的ES6特性

    遇到了要写出es6新特性的题目,所以查阅了资料来总结一下,点击查看原文. 进入正题,最常用的ES6特性有:let, const, class, extends, super, arrow functi ...

  4. ES6特性

    一.ES6特性: let, const, class, extends, super, arrow functions, template string, destructuring, default ...

  5. 第四节:教你如何快速让浏览器兼容ES6特性

    写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节前端君会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用 ...

  6. 解决浏览器兼容ES6特性

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  7. 现在就可以使用的5个 ES6 特性

    小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货.各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握. ...

  8. 解决让浏览器兼容ES6特性

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  9. 9个常用ES6特性归纳(一般用这些就够了)

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...

随机推荐

  1. scrapy--Beautyleg

    很早就开始关注:Beautyleg 高清丝袜美腿.关注之后开始觉得打开了新世界的大门,如果有相同观点的,那么你很有品味.说真的,学习爬虫的动力之一就是想把里面的图片爬取下来.哈哈哈!!! 给大家放点爬 ...

  2. 千锋教育Vue组件--vue基础的方法

    课程地址: https://ke.qq.com/course/251029#term_id=100295989 <!DOCTYPE html> <html> <head& ...

  3. filter() 函数的使用

    Python3 filter() 函数 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换. 该接收两个参数,第一个 ...

  4. spark stream简介

    1.复杂的迭代计算 假如我们计算的需要100步的计算,但是当我执行到第99步的时候,突然数据消失, 根据血统,从头进行恢复,代价很高 sc.setCheckpointDir("共享存储文件系 ...

  5. Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support (LEMP) On Ubuntu 12.04 LTS [repost]

    from : http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-lemp-on-ub ...

  6. 发布“豪情”设计的新博客皮肤-darkgreentrip

    豪情 (http://www.cnblogs.com/jikey/)是一名在上海的前端开发人员,长期驻扎在园子里.他为大家设计了一款新的博客皮肤——darkgreentrip. 以下是该博客皮肤的介绍 ...

  7. PL/SQL 循环语句

    1.基本 LOOP 循环语句 语法: LOOP 语句序列; END LOOP; 其中,语句序列中需要一个EXIT语句或一个EXIT WHEN语句来中断循环. 实例: DECLARE x ) :; BE ...

  8. 每天一个Linux命令(11):cat命令

    cat命令连接文件并打印到标准输出设备上. 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容.因此,一般用more等命令分屏显示.为了控制滚屏,可以按Ctrl+S键,停止滚 ...

  9. isinstance()判断数据类型

    判断数据类型isinstance()l=[1,2,3]print(isinstance(l,list))#括号里面第一个填需要判断的数据,第二个是判断条件

  10. C++ Primer 第2章 变量和基本类型

    C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...