ES6 学习笔记(一)

ES6 学习笔记,如有错误,欢迎指正。

笔记只记录了一些个人认为需要记住的知识点,其他的可以参考文末的网站。


let 和 const 命令

    ES6 新增了letconst 来声明变量。

    var声明: var 声明 是声明 全局变量 的。

    let声明: let 声明是 局部变量声明,所声明的变量只在 let 命令所在的代码块内有效

    const声明:const是 声明常量 的,const一旦声明就 必须初始化值,不能留到以后赋值,只声明不赋值就会报错。const的作用域和 let声明相同,只在声明所在的 块级作用域 中有效。另外需要注意的是,用 const 声明的常量 不能 再进行更改

es6 中的块级作用域
const声明后不能更改

 注意:① const 和 let声明的变量,不可重复声明

let 和 const声明变量不能重复声明 

            ②const 和 let 声明的变量不存在 变量提升

变量不提升

              ③ ES5中没有块级作用域,ES6 中 引入了块级作用域

运用

上述情况在ES5 中的正确表现形式:运用了 闭包 和 立即执行函数,非常复杂

ES5

解析:用 var 声明时,全局范围内有效,所以全局变量只有一个 i ,每次循环 i  都会发生变化, 而函数内的 console.log(i) , 里面的 i 指向 的就是全局的 i,而 函数又不是 立即执行,等到所有代码运行结束,才执行setTimeout , 此时 i 已经为10 , 所以输出 10个 10 ;

用 let 声明是,当前的 i 只在本轮循环有效 , 每次循环的 i 其实都是一个 新  的变量。


变量的解构赋值(常用)

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

          ① 数组 的解构赋值

解构赋值

                        如果解构不成功,变量的值就等于undefined!!!!!

解构不成功

            注意:解构赋值允许 使用默认值,ES6内部使用 严格相等运算符(===),只有当数组成员严格等于 undefined 的时候,默认值才会生效。(见下图,当数组成员等于 null 时候,默认值不会生效,因为 null 不严格等于 undefined)

设置默认值
设置默认值

       ② 对象 的解构赋值

对象的解构赋值

                对象的解构赋值的内部机制是先找到同名属性,再赋给对应的变量。真正被赋值的是后者,而不是前者。foo 是匹配模式,baz 才是变量 ,真正被赋值的是变量 baz,而不是模式 foo

被赋值的是后者,不是前者

                    对象的解构也可以指定默认值。

对象的解构也可以指定默认值  

    ③ 字符串 的解构赋值

字符串解构

     ④ 函数参数 的解构赋值(见下文函数的扩展)

     ⑤ 用途:1. 交换变量的值

变量的交换

                  2.从函数返回多个值

                函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便

取值

                  3. 函数参数的定义

函数参数的定义

                  4.提取 JSON 数据(用途较广)

提取json数据

                  5. 函数参数的默认值

函数参数的默认值

                  6. 遍历 Map 结构(见后文的  Iterator 笔记)

                  7. 输入模块的指定方法

                const { SourceMapConsumer,SourceNode } = require("source-map");


字符串的扩展

    字符串模板(运用广泛):模板字符串(template string)是增强版的字符串,用反引号(`)标识。模板字符串中嵌入变量,需要将变量名写在 ${ } 之中。

字符串模板

            使用模板字符串表示多行字符串,所有的 空格 和 缩进 都会被保留在输出之中。


函数的扩展

    ES6 允许为函数的参数设置 默认值,即直接写在参数定义的后面。

设置默认参数
不能再次声明

        注意:参数变量是默认声明的,所以不能用let或const再次声明。

参数重名的情况

                使用参数默认值时,函数不能有同名参数。

        与解构赋值默认值结合使用

解构赋值

        上面代码只使用了 对象的解构赋值默认值没有使用函数参数的默认值只有当函数foo的参数是一个对象时,变量 x 和 y 才会通过解构赋值生成。如果函数foo调用时没提供参数,变量x和y就不会生成,从而报错。通过提供函数参数的默认值,就可以避免这种情况。

函数参数的默认值

                上面代码指定,如果没有提供参数,函数foo的参数 默认为一个空对象

            练习题

                两种写法都对函数的参数 设定了默认值,区别是写法一函数参数的默认值是空对象,但是设置了对象解构赋值的默认值;写法二函数参数的默认值是一个有具体属性的对象,但是没有设置对象解构赋值的默认值。

                简单来讲,就是 传了参数,函数参数的默认值就不会起作用 ; 没传参数,函数参数的默认值起作用。

                传了参数, 解构赋值的默认值 和 传入的参数 进行解构,写法二 没有 解构默认值,所以 如果 传进去的值,有缺少 X 或者  y,缺少的一个 都是 undefined。

习题

        rest 参数

        ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中

             简单来说,rest 参数 是一个 数组!!!!!! 将 参数 都放入 一个数组中去。

rest 参数
rest 参数

                rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。

        箭头函数: ES6 允许使用“箭头”(=>)定义函数。

箭头函数

   如果箭头函数不需要参数需要多个参数,就使用一个圆括号代表参数部分

无参或多参的表现形式

               箭头函数可以与变量解构结合使用

箭头函数可以与变量解构结合使用

                注意  !!!!!!!!!!

                (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

                (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

                (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

                (4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

                上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。

this 指向

                    上面代码中,转换后的 ES5 版本清楚地说明了,箭头函数里面根本没有自己的this,而是引用外层的this。


数组的扩展

    ① 扩展运算符

扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组 转为 用逗号分隔的参数序列

扩展运算符

        该运算符主要用于函数的调用,将一个数组变成参数序列。

扩展预算符的运用

    扩展运算符的运用:1. 复制数组

复制数组

                                     2.合并数组

合并数组

                                     3.与解构赋值结合

           如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。

与解构赋值结合

                                     4.字符串

字符串与扩展运算符

    ② Array.from( ) : Array.from方法用于将 两类对象 转为 真正的数组类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map).

Array.from()

        这就是一个标准的JSON数组格式,跟普通的JSON对比是在最后多了一个length属性。只要是这种 特殊的json格式 都可以轻松使用ES6的语法转变成数组。(必须要有length 属性!!!!!

③ Array.of( ) :将一组值转换为数组。

        Array.of总是返回参数值组成的数组。如果没有参数,就返回一个空数组

   Array.of

 ④ find( )实例方法

            数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。

            find方法的回调函数可以接受三个参数,依次为当前的值当前的位置原数组

find( )实例方法

⑤  includes( ) 实例方法

        表示某个数组是否包含给定的值,返回 布尔值

 includes()

fill( ) 实例方法

         数组进行填充,它接收三个参数,第一个参数是填充的变量,第二个是开始填充的位置,第三个是填充到的位置。数组中已有的元素,会被全部抹去

 fill( )

对象的扩展

    属性的简洁表示法:ES6 中允许在对象中,直接写变量。这时,属性名为变量名,属性值为变量的值。

对象中直接写变量
对象中直接写变量

     方法的简洁表示法

方法的简洁表达

    综合运用

综合运用

        属性名表达式

        ES6 允许字面量定义对象时,用 表达式 作为对象的属性名,即把表达式放在方括号内。

属性名表达式

        Object.is(  ) 对象比较

            它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

   Object.is

        Object.assign(  )合并对象

            Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。

 Object.assign(  )

        注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性

    Object.keys( 对象 )

        Object.keys方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的 键名

    Object.values( 对象 )

    Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的 键值


参考:ECMAScript 6 入门

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

推荐阅读更多精彩内容

  • 最近学习了ES6,被它更简洁的代码编写方式、面向对象以及模块化开发所吸引。ES6有一定的学习成本而且知识点比较琐碎...
    Mescal川阅读 3,558评论 0 3
  • 第一章 块级作用域绑定 let 和 const 都是不存在提升,声明的都是块级标识符都禁止重声明 每个const声...
    NowhereToRun阅读 1,586评论 0 2
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 3,034评论 3 37
  • [TOC] 参考阮一峰的ECMAScript 6 入门参考深入浅出ES6 let和const let和const都...
    郭子web阅读 1,781评论 0 1
  • 看了电影版《从你的全世界路过》,望着其中稻城亚丁熟悉又略有些陌生的景象,不禁翻看起去年在稻城留下的照片,忽然想念稻...
    杜小姐的秘密花园阅读 1,264评论 18 25