第一章:ES6详解(变量,函数-箭头函数-参数,解构赋值....)

程序员也可以有艺术人生,大家好我是超人不会飞.

先看下基本的版本
ES历史版本


image.png

兼容性
http://kangax.github.io/compat-tablees5/
http://kangax.github.io/compat-tablees6/

ES6(ES2015) : 不用编译就可以运行ES66语法的浏览器 IE10+ Chrom FF 移动端 NodeJS

因此为了兼容老版本的浏览器,我们可以使用babel去提前编译.

编译,转换

  1. 在线转换(麻烦,用户每次点击就会去编译一次)
  2. 提前编译

babel==browser.js 是同义词.

简单的小demo(在线编译,效率慢)


image.png

ES6
1.变量
2.函数
3.数组
4.字符串
5.面向对象
6.Promise
7.generator 将同步操作拆成异步操作 事实上generator是对Promise的封装
8.模块化

变量
var 问题
1.可以重复声明
2.无法限制修改
3.没有块级作用域 {} if(){}else{}

解决var的问题.
因此在ES6


image.png

块级作用域有什么用?
1.典型问题

image.png

优化

image.png

ES6

image.png

把项目写出来是容易,最难的是管理这个项目.

函数
箭头函数

()=>{

}

1如果只有一个参数, ()可以省略
2.如果只有一个return语句,没有其他语句的情况下,{}可以省略

函数
参数
1.参数的 扩展/展开 大白话就是,我可以将 数组收一起,也可以将数组摊开.
2.默认参数

参数的扩展:
1.收集剩余的参数

function(a,b,...args){}

*Rest Parameter必须是最后一个
2.展开数组

function bin(a,b,c){
    console.log(a,b,c);
}
var arr = [1,2,3];
bin(...arr);
let arr1 = [1,2,3];
let arr2 = [4,5,6];

let arr = [...arr1,...arr2];
console.log(arr);

这一种展开是不支持的

let a;
let arr = [1,2,3];
a = ...arr;
这样是不支持的.

扩展与展开的结合

function arr(...args){
        fn(...args);
}

function fn(a,b){
      console.log(a,b);
}

arr(1,2);

默认参数

function arr(a,b=77,c=99){
        console.log(a,b,c);
}

arr(1);
arr(1,2);
arr(1,2,3);
结果:
> 1 77 99
> 1 2 99
> 1 2 3

解构赋值
解构就是把东西拆开
1.左右两边结构必须一样.
2.右边必须是个东西
3.声明和赋值不能分开(必须在一句话里面)

let arr = [1,2,3]
let[a,b,c] = [...arr] //左边是数组,右边是数组
console.log(a,b,c)
let arr = {a:1,b:2,c:3};
let {a,b,c} = {...arr} //左边是json 右边是json
console.log(a,b,c)
image.png
image.png

特别注意:下面这个会报错,因为要符合右边是个东西

let [a,b] = {1,2};
console.log(a,b);

上面的代码, {1,2} 上面都不是,不是数组也不是json,也不是对象............

另外要符合声明和赋值不能分开,如代码就不对

let [a,b];
[a,b] = [1,2];

数组
主要是多了4个方法,这4分方法是非常好用的.
map --映射 一个对一个 我给你10个东西你给我返回10个东西
reduce --汇总
filter --过滤
forEach -- 循环

map

let arr = [1,2,3];
let result = arr.map(item=>item*2);
console.log(result);
结果
> Array [2, 4, 6]
let arr = [60,45,99];
let result = arr.map(item=>item>=50?'及格':'不及格');
console.log(result);
结果
> Array ["及格", "不及格", "及格"]

reduce
汇总 一堆出来一个
求和

let arr = [60,45,99];
let result = arr.reduce(function(temp,item,index){
    return temp + item;
});
console.log(result);
结果
204

求平均

let arr = [60,45,99];
let result = arr.reduce(function(temp,item,index){
    if(arr.length-1==index){
        return (temp+item)/arr.length;
    }
    return temp + item;
});
console.log(result);
结果
68

filter

let arr = [60,45,99];
let result = arr.filter(item=>item>50?true:false);
console.log(result);
结果
> Array [60, 99]
let arr = [{name:'a',price:1000},{name:'b',price:20000},{name:'c',price:50}];
let result = arr.filter(item=>item.price<60);
console.log(result);
结果
> Array [Object { name: "c", price: 50 }]

forEach 和for循环是一样的.就是写法简单了一点.

let arr = [60,45,99];
arr.forEach((item,index)=>{
    console.log(index+ ':' + item)
})

字符串
1.有2的新的方法 startsWith endsWith
2.字符串模板

startsWith(应用场所)

function withWho(str) {
    if(str.startsWith('http://')){
        console.log('开始为http')
    }else if(str.startsWith('https://')){
        console.log('开始为https');    
    }else {
        console.log('其他类型');
    }
}
withWho('http://a.com');
withWho('ht//a.com');
结果
> "开始为http"
> "其他类型"

endsWith(应用场所)


image.png

字符串模板
使用的是'' ` '' 返单引号

i: 直接将东西塞到字符串里面
ii:可以折行

let a = 99;
let str = `这是字符串模板${a}`;
console.log(str)
结果
> "这是字符串模板99"

ES6面向对象-基础
1.class关键字
2.class里面直接加方法

ES6之前面向对象的写法

function User(name,age){
    this.name = name;
    this.age = age;
}

User.prototype.sayName = function(){
    console.log(this.name);
}
User.prototype.sayAge = function() {
    console.log(this.age);
}

u1 = new User('bin',23);
u1.sayName();
u1.sayAge();
结果
> "bin"
> 23

新版ES6的出来使对象更像java,因为出现了class

class User{
    constructor(name,age){
      this.name = name;
      this.age = age;    
    }
    sayName(){
        console.log(this.name);
    }
    sayAge(){
        console.log(this.age);
    }
}
u1 = new User('bin',23);
u1.sayName();
u1.sayAge();
结果
> "bin"
> 23

旧的继承的写法

function User(name,age) {
    this.name = name;
    this.age = age;
}
User.prototype.sayName = function(){
    console.log(this.name);
}
User.prototype.sayAge = function(){
    console.log(this.age);
}

function VIPUser(name,age,level) {
    User.call(this,name,age);
    this.level = level;
}

VIPUser.prototype = new User();
VIPUser.prototype.constructor = VIPUser;

VIPUser.prototype.sayLevel = function(){
    console.log(this.level);
}

u1 = new VIPUser('bin',23,3);
u1.sayName();
u1.sayAge();
u1.sayLevel();
结果
> "bin"
> 23
> 3

新的ES6的继承的写法
super 叫做 超类(父类)
super() 就是在执行超类(父类)的构造函数;

class User{
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    sayName(){
        console.log(this.name);
    }
    sayAge () {
        console.log(this.age);
    }
}

class VIPUser extends User {
    constructor(name,age,level){
      super(name,age);//执行超类的构造函数.
      this.level = level;
    }
    sayLevel(){
        console.log(this.level);
    }
}

var u1 = new VIPUser('superman',23,3);
u1.sayName();
u1.sayAge();
u1.sayLevel();
结果
> "superman"
> 23
> 3

面向对象-实例
即应用

面向对象应用-React
React是强依赖ES6的面向对象的.
React
1.组件化
2.JSX
JSX==babel==browser.js


基本依赖

可以去看看我的React基础开发.

下一篇是ES6 json Promise generator ES6总结.
谢谢您的支持.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,653评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,321评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,833评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,472评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,306评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,274评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,658评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,335评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,638评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,697评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,454评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,311评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,699评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,986评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,254评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,647评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,847评论 2 335

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,094评论 0 13
  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 7,285评论 5 22
  • 三,字符串扩展 3.1 Unicode表示法 ES6 做出了改进,只要将码点放入大括号,就能正确解读该字符。有了这...
    eastbaby阅读 1,495评论 0 8
  • 本文为阮一峰大神的《ECMAScript 6 入门》的个人版提纯! babel babel负责将JS高级语法转义,...
    Devildi已被占用阅读 1,956评论 0 4
  • 桃花岛孤悬东海,远离世俗,陆岛遥遥相望,老死不相往来。 寻常船夫眼里,桃花岛是群魔乱舞的恐怖之地;少女梅超风心中,...
    风羽白阅读 2,053评论 6 12