ES6

ECMAScript 概述

ECMAScript 只是提供了最基本的语法
Javascript 在语言基础上进行了扩展


发展历程.png
ES2015 概述

很多开发者喜欢用ES6来泛指所有的新标准

  • 解决原有语法上的一些问题或者缺陷
  • 对原有语法进行增强
  • 全新的对象、全新的方法、全新的功能
  • 全新的数据类型和数据结构
准备工作

任何一个支持ES2015的环境都可以
在 VScode软件中使用 Chrome 调试

  • Debugger for Chrome
  • Live Server
  • Browser Preview
let和块级作用域

作用域 - 某个成员能够起作用的范围
在 ES2015 之前,ES只有两种作用域 全局作用域和函数作用域
块,就是{}包裹起来的一个范围
非常适合设置 在 for 循环中的循环变量

let不会进行变量声明提升

const

特点:在 let 的基础上增加来一个【只读】效果
声明的时候必须同时赋初值

最佳实践:不用 var,主用 const,配合 let

数组的结构
    //以前
    const arr = [100, 200, 300]
    const foo = arr[0]
    const bar = arr[1]
    const baz = arr[2]
    console.log(foo, bar, baz)
    //现在
    const arr = [100, 200, 300]
    const [foo, bar, baz] = arr
    console.log(foo, bar, baz)

    const arr = [100, 200, 300]
    const [, , baz] = arr
    console.log(baz)

    const arr = [100, 200, 300]
    const [foo,...rest] = arr
    console.log(rest)

    const path = "foo/bar/baz"
    const [,,a] = path.split("/")
    console.log(a)

对象的解构
    const obj = { name: 'zs', age: 18}

    const name = "tom"
    const {name: newName = "jack"} = obj
    console.log(name)
    console.log(newName)
    const {log} = console
    log("hhh")
模版字符串
    const str = `this is 
    a \`string`
    console.log(str)

    // 插值
    const name = "tom"
    const str = `hey, ${name}`
    console.log(str)  
模版字符串标签函数
    const name = "zs"
    const gender = true
    function myTagFunc(strings,name,gender){
        // console.log(strings,name,gender)
        const sex = gender ? "man" : "woman"
        return strings[0] + name + strings[1] + sex + strings[2]
    }
    const str = myTagFunc`hi, ${name} is a ${gender}`
    console.log(str)
字符串的扩展方法
  • includes()
  • startsWith()
  • endsWith()
    const msg = 'Error: foo is not define'
    console.log(msg.startsWith('Error'))
    console.log(msg.endsWith('.'))
    console.log(msg.includes(foo))
参数默认值
    function foo(enable = true) {

    }
    foo()
剩余操作符
    function fun(...args) {
        console.log(args)
    }
    fun(1,2,3,4)
展开操作符
    const arr = ['foo', 'bar', 'baz']
    console.log(...arr)
剪头函数的this

内部不会改变this的指向

Object.assign 方法

将多个源对象中的属性复制到一个目标中

    const sourse1 = {
        a: 123,
        b: 456
    }

    const target = {
        a: 456,
        c: 789
    }
    const result = Object.assign(target,sourse1)
    // target:目标对象 sourse: 源对象

可以利用他复制对象

Object.is 方法

解决之前 === 不太合理的地方 但是不太使用 还是建议使用 === 运算符

    let a = Object.is(+0,-0)
    let b = Object.is(NaN,NaN)
    console.log(a)
    console.log(b)
class 类
    class Person {
        constructor (name, age) {
            this.name = name;
            this.age = age;
        }
        sayHi () {
            console.log(`hi,my name is ${this.name}`)
        }
    }
    const p1 = new Person("nick",18)
    console.log(p1)
    p1.sayHi()
静态方法 static
    class Person {
        constructor (name, age) {
            this.name = name;
            this.age = age;
        }
        sayHi () {
            console.log(`hi,my name is ${this.name}`)
        }
        static create (name,age) {
            return new Person(name,age)
        }
    }
    const p1 = Person.create("zs",19)
image.png
image.png
类的继承
    class Student extends Person{
        constructor (name,age,number) {
            super(name,age);
            this.number = number
        }
        hello () {
            super.sayHi()
            console.log(`学号是 ${this.number}`)
        }
    }
    const s1 = new Student("tom",18,101)
    s1.hello();
Set 数据结构
    const s = new Set()
    s.add(1).add(2).add(3).add(4).add(2)
    console.log(s)

    // es5
    s.forEach(i => console.log(i))
    // es6
    for(let i of s){
        console.log(i)
    }

    console.log(s.size)

    console.log(s.has(4))

    console.log(s.delete(3))

    s.clear() //清除集合中所有项

    // 应用 去重
    const arr = [1.3,4,6,2,4,7,8]
    const b = Array.from(new Set(arr)) 
    // const b = [...new Set(arr)]
    console.log(b)
Map
    // Map
    const map = new Map()
    const a = {a : 1}
    map.set(a,100)
    console.log(map)
    console.log(map.get(a))
    // has delete clear 

    // 遍历
    map.forEach((value,key) => {
        console.log(key,value)
    })
Symbol 数据类型
    // Symbol
    // Symbol 符号,作用就是表示一个独一无二的值
    const s = Symbol()
    console.log(s)
    console.log(typeof s)

    // 添加
    const obj = {
        [Symbol()]:789
    }
    obj[Symbol()] = 123
    obj[Symbol()] = 456
    console.log(obj)
    console.log(obj[Symbol()])  // undefined 外部无法访问
for of 遍历

作为遍历所有数据结构的统一方式

    const arr = [100,200,300,400]

    for (const item of arr){
        console.log(item)
    }

    arr.forEach(item => {
        console.log(item)
    })

for of 内部可以用break打断

    for (const item of arr){
        console.log(item)
        if(item >= 200){
            break
        }
    }
ES2016
    const arr = [1,true,NaN,23,'aaa']

    // includes
    console.log(arr.includes(NaN))

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

推荐阅读更多精彩内容

  • 一、ES6简介 ​ 历时将近6年的时间来制定的新 ECMAScript 标准 ECMAScript 6(亦称 ...
    一岁一枯荣_阅读 6,055评论 8 25
  • ES6 新特性 ES6 新特性 一ES6简介 二块级作用域绑定1 let声明2 const声明Constant D...
    _无为_阅读 834评论 0 3
  • - ECMAScript 与 Javascript - ECMAScript的发展过程 - ECMAScript2...
    爵迹01阅读 216评论 0 1
  • 作者:鱼头的Web海洋 公号 / 陈大鱼头 介绍 ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商...
    白茶_别事阅读 733评论 0 0
  • ECMAScript 概述 JavaScript是ECMAScript的拓展语言 ECMAScript只是提供了最...
    amanohina阅读 1,168评论 0 0