美文网首页三月听我说
前端水深,后端绕行——ES6

前端水深,后端绕行——ES6

作者: 楚瑞涛_三月 | 来源:发表于2018-08-03 11:15 被阅读216次

    看了两天的vue视频,发现前端水好深,各种前端框架:Angular,React,Vue扑面而来,弄得我晕头转向的。


    头疼.jpg

    在看视频的过程中,我一直听到一个名词:ES6,出于好奇的我马上就去查阅了相关资料。下面我就为大家简单介绍一下ES6。

    1.ES6简介

    ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony。

    2.变量声明const和let

    在ES6以前,大家都是在用var关键字进行声明变量。这就牵涉到一个变量提升的问题。
    上代码:

    function aa() {
        if(flag) {
            var test = 'hello man'
        } else {
            console.log(test)
        }
      }
    

    相信学过javaScript的小伙伴都知道,程序在解析的时候会把var test 自动提到if语句前执行,即:

    function aa() {
        var test // 变量提升,函数最顶部
        if(flag) {
            test = 'hello man'
        } else {
            //此处访问 test 值为 undefined
           console.log(test)
        }
        //此处访问 test 值为 undefined
    }
    

    接下来该ES6登场了
    首先先介绍一下letconstlet是来声明变量、const是来声明常量。letconst都是款及作用域。下面来解释一下块级作用域:

    • 在一个函数内部
    • 在一个代码块内部

    注意:letconst都不能重复声明

    letconst声明的量都只在当前代码块中有效,不会被提升到当前函数的最顶部,这通常被称作“暂时性死区(TDZ)”。

    用var将上面的例子进行转化:

    function aa() {
        if(flag) {
           let test = 'hello man'
        } else {
            //test 在此处访问不到
            console.log(test)
        }
    }
    

    接下来说const
    const是用来声明常量的,在声明时必须提供一个值,且改值在被设置后不能进行修改。

    const name = 'lux'
    name = 'joe' // 再次赋值此时会报错
    

    如果使用const来声明一个对象,那么对象所包含的值是可以进行修改的。抽象一点儿说,就是对象所指向的地址不能改变,而变量成员是可以修改的。

    const student = { name: 'cc' }
    // 没毛病
    student.name = 'yy'
    // 如果这样子就会报错了
    student  = { name: 'yy' }
    

    3.字符串模板

    一:字符串的拼接,将表达式嵌入字符串中进行拼接,用${}来界定。

    //ES5 
    var name = 'lux'
    console.log('hello' + name)
    //es6
    const name = 'lux'
    console.log(```hello ${name}```) //hello lux
    

    二:在ES5时我们通过反斜杠()来做多行字符串或者字符串一行行拼接。ES6反引号(``)直接搞定。

    // ES5
    var msg = "Hi \
    man!
    "
    // ES6
    const template = ```<div>
        <span>hello world</span>
    </div>
    

    对于字符串 ES6+ 当然也提供了很多厉害也很有意思的方法,说几个常用的。

    // 1.includes:判断是否包含然后直接返回布尔值
    const str = 'hahay'
    console.log(str.includes('y')) // true
    
    // 2.repeat: 获取字符串重复n次
    const str = 'he'
    console.log(str.repeat(3)) // 'hehehe'
    //如果你带入小数, Math.floor(num) 来处理
    // s.repeat(3.1) 或者 s.repeat(3.9) 都当做成 s.repeat(3) 来处理
    
    // 3. startsWith 和 endsWith 判断是否以 给定文本 开始或者结束
    const str =  'hello world!'
    console.log(str.startsWith('hello')) // true
    console.log(str.endsWith('!')) // true
    
    // 4. padStart 和 padEnd 填充字符串,应用场景:时分秒
    setInterval(() => {
        const now = new Date()
        const hours = now.getHours().toString()
        const minutes = now.getMinutes().toString()
        const seconds = now.getSeconds().toString()
        console.log(`${hours.padStart(2, 0)}:${minutes.padStart(2, 0)}:${seconds.padStart(2, 0)}`)
    }, 1000)
    

    4.class 类

    在ES6以前,偶们定义一个类,只能通过function来模拟

    function Person(){
        this.name = 'xxx';
    }
    Person.prototype.say = function(){
    }
    var person = new Person(); 
    

    下面是ES6中类的使用:

    //类的定义
    class Animal {
        //ES6中新型构造器
        constructor(name) {
            this.name = name;
        }
        //实例方法
        sayName() {
            console.log('My name is '+this.name);
        }
    }
    
    //类的继承
    class Programmer extends Animal {
        constructor(name) {
            //直接调用父类构造器进行初始化
            super(name);
        }
        program() {
            console.log("I'm coding...");
        }
    }
    

    ES6中添加了对类的支持,引入了class关键字。JS本身就是面向对象的,ES6中提供的类实际上只是JS原型模式的包装。现在提供原生的class支持后,对象的创建,继承更加直观了,并且父类方法的调用,实例化,静态方法和构造函数等概念都更加形象化。

    5.Set集合

    ES6中添加了一个Set集合,该集合是一个不能有重复元素的集合,重复添加无效。

    var s = new Set();
    s.add(1);
    s.add(2);
    // s.delete(2)  删除
    // s.clear() 清空
    // s.size() 长度
    

    遍历的方式

    var keys = s.keys(); // 返回一个迭代器
    for(var k of keys){
        console.log(k);
    }
    
    var values = s.values();
    for(var v of values){
        console.log(v);
    }
    
    var entries = s.entries(); // 将key和value 组合成一个数组返回
    for(var e of entries){
        console.log(e);
    }
    

    终于该介绍箭头函数了()=>{}
    这是一种特别简洁、优雅的函数写法

    它可以这么写

    var fn = (item, index) => {console.log(item)}
    

    也可以这么写

    var fn = item => {console.log(item)}
    

    还可以这么写

    var fn = item => (item)
    fn(2) // 2
    

    还可以更简洁

    var fn = item => item
    fn(2) // 2
    

    =>后使用小括号() 表示将结果作为返回值,单行结果时还可以省略
    当参数唯一时,还可以将前面的() 省略

    总结

    今天我给大家分享的只是ES6的冰山一角,ES6还有许多其他的更好玩的新特性,这需要大家自行下去搜索资料进行学习。如遇到有什么问题,欢迎大家与我进行留言探讨。

    参考文献
    https://www.jianshu.com/p/287e0bb867ae
    https://www.cnblogs.com/Wayou/p/es6_new_features.html
    https://blog.csdn.net/qq_36458203/article/details/78261309

    相关文章

      网友评论

      本文标题:前端水深,后端绕行——ES6

      本文链接:https://www.haomeiwen.com/subject/tvlyvftx.html