2020921王杉

学习内容:

面向对象:

  • 模板字符串:
    1. 定义:简化版的字符串拼接
    2. 模板字符串格式:实例:今天天气${sky}
    3. 模板字符串特点:①模板字符串支持换行②模板字符串支持动态生成内容,在一对中使用 ${JS表达式},模板字符串会自动执行JS表达式的结果,并拼接到最终生成的普通字符串中
  • let:

    1. 定义:let用于代替var,用于声明变量的新关键词
    2. 什么使用let避免var两个缺点:① 变量声明提前,打乱了程序正常的执行顺序 ②没有块级作用域,代码块内的变量,会影响块外的变量
    3. let的优势:①禁止变量声明提前,保证程序按顺序执行代码。不会破坏程序正常的执行顺序②让程序结构(分支和循环)的{},也成为一级作用域——块级作用域,保证块内和块外即使有相同的变量,也不会相互影响,避免了块内的变量污染外部
    4. 原理:let做了两件事,①let会被自动翻译为匿名函数自调②双保险,let为了进一步避免可能的冲突将变量悄悄改了名字
    5. 特点:①全局写 let t=0, 用 window.t 却找不到②同一级作用域内,不能在 let t=0 前,提前使用t。即使外层作用域有t变量,也不行③相同作用域内,不允许重复let同一个变量
    6. 注意:let有个兄弟, const,专门用于声明一个值不能修改的常量。同时也具有let的特点,不会被声明提前,添加了块级作用域
  • 箭头函数:

    1. 定义:简化版的回调函数,专门代替function来简化创建函数的新语法。其它语言中也叫拉姆达(lambda)表达式
    2. 为什么使用;什么时候使用:简化代码;几乎所有回调函数都可用箭头函数简化,今后,能用箭头函数简写的地方,优先使用箭头函数简写
    3. 使用箭头函数: ①去掉 function,在 () 和 {} 之间加 => ②如果只有一个参数,可省略 (),但是,如果没有参数,必须保留空 () ③如果函数体只有一句话,可省略 {},如果这句话还是 return,则可省略 return 和 {}
    4. 箭头函数问题:箭头函数是一把双刃剑,箭头函数内外this是相通的。如果希望函数内外的this保持一致时,可以不用bind()换,而直接改为箭头函数即可。如果不希望函数内外的this一致,就是希望内部的this和外部的this不一样时,不能改为箭头函数
    5. 注意事项: ①如果回调函数中的this和外部的this不相同时,不能简化 ②如果用箭头函数简化,结果内外this都是window
  • for of:

    1. 定义:专门代替普通for循环,来遍历一个索引数组

    2. 什么时候使用;以及功能:大部分只遍历数组的内容,不关心位置,也不改变遍历顺序的普通for循环,才能用for of简写;简化版的遍历索引数组和类数组对象

    3. for of 的问题: ①不支持关联数组和对象 ②只能读取元素值,不能修改元素值,按值传递 ③只能连续遍历所有

    4. 使用:for(var 变量 of 数组/类数组对象/字符串){ //都是数字下标
      // of会依次取出后边数组/类数组对象/字符串中每个位置上的的元素值,临时保存到of前的变量中
      // of前的变量会依次得到元素值
      }

    5. 对比循环:①for循环 ②arr.forEach() ③for of ④for in

    6. 注意事项:for in 只能遍历关联数组和对象,in其实不仅遍历当前对象自己的成员,且会延着原型链向父对象继续查找所有可用的成员名 (原因:计数器i的类型为string)

    7. 笔试题:①for循环、for of、forEach三种遍历,哪种效率高?一样高。其实只有一种遍历,就是for循环。其他的都是封装的for循环而已。

      ②是不是有了ES6,就不用ES5了? 要看浏览器是否兼容ES6。如果使用框架和微信开发,基本上可以使用最新的语法。因为框架中和微信开发中都自带翻译工具(Babel),在项目打包时,会将ES6代码翻译成ES5代码,保证浏览器兼容性。如果没使用框架,使用原生或jquery开发,则尽量不要使用ES6

  • 参数增强:

    1. 参数默认值:(default ES6允许为函数定义中形参列表的最后一个参数定义默认值,如果没有传递实参,则自动调用形参的默认值)

      使用参数默认值:①定义函数时 function 函数名(形参1,形参2,...,形参n=默认值)

      ②调用函数时,如果没有传入最后一个实参值,则自动使用默认值代替

    2. 剩余参数:(rest 专门代替arguments的语法,代替arguments处理不确定参数个数的情况)

      使用剩余参数避免使用arguments带来缺点:

      ①arguments是类数组对象,不是纯正的数组,不能使用数组家的函数 ②arguments只能全部获得实参值列表。不能有选择的获得部分实参值 ③arguments单词太长,且没有意义,还不能自定义 ④ES6中的箭头函数,禁止使用arguments了

      使用剩余参数:①从头到尾获得所有实参值( function fun(...数组名){...} )

      ②剩余参数可以只收集部分实参值( function 函数名(形参1,形参2,...数组名){...} )

      剩余参数优点:①数组名可以自定义②是纯正的数组类型,可用数组家全套API③可以有选择的获得部分实参值,而不必非要照单全收④ES6中的箭头函数支持剩余参数语法

    3. *打散数组:

      定义:将一个数组打散为多个元素值,依次传给函数的多个形参变量,代替apply

      使用打散数组:函数名(...数组) 实际操作:

      复制数组:var arr1=arr.slice(); var arr1=[..arr]

      合并两个数组:var arr3=[].concat(arr1,arr2) var arr3=[...arr1,...arr2]

      特殊:...可以打散对象:①浅克隆一个对象:var obj1={...obj}

      ②合并两个对象:var obj3={...obj1,...obj2}

      注意:①定义函数时,形参列表中的...是收集不确定个数的实参值的意思

      ②调用函数时,实参值列表中的...是打散数组实参为多个实参值,分别传入的意思

      笔试题:①...不是打散的意思吗?这里怎么成了收集?

      定义函数时,形参列表中的...是收集不确定个数的实参值的意思。调用函数时,实参值列表中的...是打散数组实参为多个实参值,分别传入的意思

      ②...作为打散数组放在实参列表中时,不一定放在结尾?

      是的,可以和其他单独的实参值混搭

学习心得:

今天上午进行了对星期五试卷的讲解,把一些试卷上出现过自己没有接触过的好好学习弄懂,然后就是把其它之前讲过的知识点做成的题错了的就好好再重新学习一遍,加深印象,下次不能在错了,之后下午学习了ES6的许多知识,有很多新知识需要自己去多写写,把知识和代码联系起来,熟悉用法和重要的注意点,也有有点绕的知识需要加把劲多练练弄清楚,好好学习加油!

标签

评论

this is is footer