前端打怪之旅=>Es6入门(介绍及变量)

91 阅读4分钟

1.ECMASript相关介绍(基础理解)

1.1什么是ES

img

ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,所以它可以理解为是javascript的一个标准,但实际上后两者是ECMA-262标准的实现和扩展。

1.2什么是ECMAScript

ECMAScript是由Ecma国际通过ECMA-262标准化的脚本程序设计语言。

1.3什么是ECMA-262

Ecma国际制定了许多标准,而ECMA-262只是其中的一个,所有标准列表查看 www.ecma-international.org/publication…

1.4ECMA-262历史

ECMA-262(ECMAScript)历史版本查看网址

www.ecma-international.org/publication…

第1版1997年制定了语言的基本基本语法
第2版1998年较小改动
第3版1999年引入正则、异常处理、格式化输出等。IE开始支持
第4版2007年过于激进,未发布
第5版2009年引入严格模式、SON,扩展对象、数组、原型、字符串、日期方法
第6版2015年模块化、面向对象语法、Promise、箭头函数、Iet、const、数组解构赋值等等
第7版2016年幂运算符、数组扩展、Async/await关键字
第8版2017年Async/await、字符串扩展
第9版2018年对象解构赋值、正则扩展
第10版2019年扩展对象、数组方法
ES.next动态指向下一个版本

1.5谁在维护ECMA-262

TC39(Technical Committee39)是推进ECMAScript发展的委员会。其会员都是公司(其中主要是浏览器厂商,有苹果、谷歌、微软、因特尔等)。TC39定期召开会议,会议由会员公司的代表与特邀专家出席

1.6为啥学习这个捏

  • ES6的版本变动内容最多,具有里程碑意义
  • ES6加入许多新的语法特性,编程实现更简单、高效
  • ES6是前端发展趋势,就业必备技能

1.7ES6兼容性

ECMAScript 6 compatibility table (kangax.github.io)可查看兼容性

image.png

2.变量

2.1let声明变量

2.1.1声明以及赋值

            //声明变量
            //单个变量声明
            let a;
            //多个变量声明
            let b,c,d;
            //对单个变量赋值
            let e = 100;
            //对多个变量赋值
            let f=999,g='love',h=[];

2.1.2注意

  • 变量不能重复声明

                let sun;
                let sun;
    

image.png

他会报错,说这个变量已经被声明,对新手来说是值得注意的,如果你已经有其他语言的经验的话,那这种报错基本上很容易找到。

需要注意的是如果使用的var来声明变量,使用同一个是可以的。

也就是说let的命名规则要比var规范

  • 作用域

    • 块级

      • let定义

      • var定义

      
                      {
                          let gril = 'none';
                      }
                      console.log(gril)
      

image.png

报错显示未定义变量,但实际上你定义了,但是因为作用域的问题,导致你的作用范围不在全局生效,只在代码块内生效,全局找不到,当然就报错了。

                {
                    var gril = 'none';
                }
                console.log(gril)

    

image.png

换成var就能读取到变量值了,这是为什么呢? 因为var在代码中没有块级作用域,会向全局的window属性添加属性。 if while for等等这些有{}的都不会生效

    • 全局
    • 函数
    • eval
  • 不存在变量提升

    • 使用var

                  console.log(name)
                  var name = '张三'
      

      image.png var name; console.log(name) var name = '张三'

    • 使用let

                  console.log(name)
                  let name = '张三'
      

      image.png

  • 不影响作用域链

                {
                    let school='浅辄'
                    function fn(){
                        console.log(school);
                    }
                    fn();
                }
    

    image.png

2.2const声明常量

2.2.1声明以及赋值

        //声明常量
        const SCHOOL = '浅辄';
        console.log(SCHOOL)

image.png

2.2.2注意

  • 一定要赋初始值

    const A;
    

    image.png

  • 一般常量使用大写(都很默认的规则啦)

    const a = 1;
    

    反正也不报错,不正式

  • 常量值不能修改

                const SCHOOL = '浅辄';
                SCHOOL = 'QZ'
    

image.png

  • 块级作用域

                {
                    const PLAYER = 'Lee';
                    
                }
                console.log(PLAYER)
    

    image.png

  • 对于数组和对象的元素修改,不算做对常量的修改,不会报错

                const TEAM = ['UZI','FAKER','6.6']
                TEAM.push('Mekio')
                console.log(TEAM)
    

    image.png

    这是为什么,因为常量指向的地址没有发生改变,虽然数组元素发生变化,但是常量所指向地址没有报错。

2.3变量结构赋值

ES6允许按照一定模式从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。

2.3.1数组的结构

        const F4 = ['莱昂纳多·小沈阳','约翰尼·宋小宝','克里斯蒂安·刘能','尼古拉斯·赵四']
        let [xiao,liu,zhao,song]=F4;
        console.log(xiao)
        console.log(liu)
        console.log(zhao)
        console.log(song)

image.png

2.3.2对象的解构

const zhao = {
                    name: '赵本山',
                    age: '不知道',
                    xiaopin: function() {
                        console.log("卖拐");
                    }
            };
            let {
                name,
                age,
                xiaopin
            } = zhao
            console.log(name);
            console.log(age);
            console.log(xiaopin);
            xiaopin()

image.png

这样是为了重复调用的时候少写zhao.xiaopin(),减少代码的冗余。

2.4模板字符串

ES6引入新的声明字符串的方式「''」

2.4.1声明

        let str =  `i am a string!`
        console.log(str,typeof str)

image.png

2.4.2特性

  • 内容中可以直接出现换行符

            let str='<u1>
                        <1i>周星驰</1i>
                        <1i>周润发</1i>
                    </u1>';
    

image.png

使用单引号就不可以出现换行符

        let str=`<u1>
                    <1i>周星驰</1i>
                    <1i>周润发</1i>
                </u1>`;

image.png

就不会报错了

  • 变量拼接

                let favorite = '杰森';
                let out = `${favorite}是我喜欢的演员`;
                console.log(out)
    

image.png