JSCore_day05

正课:

  1. ES5

  2. ES6

  3. ES5
    Object.create(): 仅基于一个现有父对象,就可创建子对象
    何时: 如果只有对象,没有构造函数也想创建子对象时
    如何: var child=Object.create(father,{
    //definePropertites
    属性名:{
    特性:值,
    … :…
    },
    属性名:{
    … : …
    }
    })
    创建一个新对象child,并让child继承father,还可给child添加新自有属性

替换this: 3种方法:

  1. call/apply: 立刻调用一次函数,并临时替换this
    如果给定的参数值,是放在数组中的,可将call换成apply。apply可打散数组参数为单个值
  2. bind: 基于原函数,创建一个一模一样的新函数,并永久绑定this。
    特殊场景: 所有回调函数中的this要绑定,都用bind

数组API:

  1. 查找元素:
    var i=arr.indexOf(元素,starti)
    用法同str.indexOf()完全一样

  2. 判断:
    判断数组中的元素是否符合要求: 2种:
    every() 判断数组中是否所有元素都符合要求
    some() 判断数组中是否包含符合要求的元素
    如何:
    var bool=arr.every(function(elem, i, arr){
    //this->window,所以不能用
    //elem: 当前元素值
    //i: 当前位置
    //arr: 当前数组
    return 判断条件
    })
    every会拿着回调函数在arr中每个元素上执行一次,回调函数返回当前元素是否符合要求。如果所有元素都符合要求,整个every就返回true。只要有一个不符合要求,就返回false。

  3. 遍历API:
    对每个元素执行相同的操作: 2种:

  4. forEach() 对原数组中每个元素执行相同的操作,执行后,再存入原数组中。

  5. map() 取出原数组中每个元素,执行相同操作后,放入新数组返回。原数组不变。
    arr.forEach(function(elem,i,arr){
    arr[i]=新值
    })
    var newArr=arr.map(function(elem,i,arr){
    return 新值
    })

  6. 过滤和汇总:
    过滤: 复制出原数组中符合条件的元素组成新数组返回
    var subArr=arr.filter(function(elem,i,arr){
    return 判断条件
    })
    汇总: 对数组中所有元素进行统计,并返回统计结果
    var result=arr.reduce(function(prev, elem, i, arr){
    return 将elem和现有prev统计后,汇总回prev中
    }, 起始值)

  7. ES6 : 不改变原理的基础上,尽量简化代码
    学ES6同时,要学替代的ES5方法
    let: 代替var 用于声明变量
    var的问题: 2种:

    1. 声明提前
    2. 没有块级作用域
      let的原理: 匿名函数自调!
      let的优点:
    3. 避免声明提前
    4. 添加块级作用域
      参数增强:
  8. 默认参数: function fun(形参, …, 形参=默认值)
    强调: 带默认值的形参,必须放在形参列表末尾

  9. 剩余参数: 代替arguments
    arguments的问题2:

    1. 不是纯正的数组类型,无法使用数组的API
    2. 只能获得全部参数,不能有选择的获得部分。
      如何使用剩余参数: 2步:
    3. 定义函数时: function fun(形参,…, …数组名)
    4. 函数中使用剩余参数: 直接用"数组名"
      优: 1. 纯正的数组!
      2. 可有选择的获得部分参数
      兼容: 将arguments转换为数组: 强行调用数组的slice
      var arr=Array.prototype.slice.call(arguments) 复制全部参数
      Array.prototype.slice.call(arguments,starti)
      复制starti开始之后的剩余参数
      其实可简写为: [].slice.call(arguments)
  10. 散播(spread): 代替apply,专门打散数组参数为单个值
    apply的问题: 本意是替换this,不是专门打散数组用的
    如何: 在函数调用时: fun(…数组)

箭头函数: 专门简化回调函数或匿名函数自调

  1. 去function改=>
  2. 如果只有一个参数,可省略()
  3. 如果函数体只有一句话,可省略{},如果仅有的一句话还是return,就要继续省略return
    强调: 箭头函数中的this,内外相同
    何时: 如果希望回调函数中的this和外部的this保持一致时,就可改为箭头函数
    反例: 如果不希望内外this通用时,就不能改成箭头函数

模板字符串: 代替+做字符串拼接

  1. 用``包裹
  2. 支持换行,"",’'等
  3. 支持动态生成内容: ${js表达式}

解构: 简化使用对象的成员
简化批量赋值
什么是: 将一个对象中的成员,提取出来,单独使用
何时: 将一个大的对象,拆成多个小成员单独使用时
如何: 3种:

  1. 数组解构: 下标对下标
    var [变量1,变量2,…]=[元素1,元素2,…]
    0 1 0 1
    变量1=元素1
    变量2=元素2
    … = …

  2. 对象解构: 属性对属性
    var {属性1:变量1, 属性2:变量2,…}
    ={属性1: 值1, 属性2:值2, … }
    变量1=值1, 变量2=值2
    简写: 如果等号左边{}中,属性名和变量名相同,可只写一个即可
    var {属性1,属性2, …}=对象
    属性1 => 属性1:变量1
    总结: 今后解构一个对象时,尽量使用对象的原有属性名作为变量名

  3. 参数解构: 其实就是对象解构应用在函数中
    何时: 如果函数的参数不确定顺序时
    如何: 2步:

  4. 定义函数时:
    function fun({
    属性名1:形参1,
    属性名2:形参2,
    }){
    形参1=值1, 形参2=值2
    … …
    }

  5. 调用时: fun({属性名1:值1, 属性名2:值2,…})
    优点: 与参数顺序和个数无关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值