数组专题

  展开运算符

    使用...符号, 可以将数组"展开".

    数组展开的妙用 ...

    eg:

      // 代替apply

      const foo = [1, 2, 3]

      const bar = [4, 5, 6]

      foo.push(...bar) // 相当于foo.push(4, 5, 6)

      // 假数组转真数组

      var nodeList = document.querySelectorAll('div')

      var earlArray = [...nodeList]

      // 代替concat等复杂操作, 构造数组

      var parts = ['shoulders', 'knees'];

      var lyrics = ['head', ...parts, 'and', 'toes'];

  find和findIndex

    建议: 不要再使用for循环或者forEach或者filter去寻找数组中的某个元素!

    要点:

      findIndex和indexOf的区别

        indexOf   只能传入数值

        eg: 查找 数组内元素等于 2 的 索引

          const arr = [1,2,3,4,5];

          const ret = arr.indexOf(2);

        findIndex 可以传入 表达式

        eg: 查找第一个值大于 2 的元素的索引

          const arr = [1,2,3,4,5];

          const ret = arr.findIndex(el=>{el>2});

    拓展:

      map用来将一个数组映射为另一个数组

        eg: 将数组内的 所有数值乘以 2

          const arr = [1,2,3,4,5];

          const arr2 = arr.map(el=>{return el * 2})

      reduce用来通过某种运算归并数组元素

        eg: 将数组内的 所有元素 相乘

          const arr = [1,2,3,4,5];

          const ret = arr.reduce((prev, el)=>{return el * prev}, 1)

      filter用来过滤满足条件的数组元素

        eg: 将数组内的 大于 2 的 元素 筛选出来

          const arr = [1,2,3,4,5];

          const arr2 = arr.filter(el=>{return el > 2})

      some用来判断数组中有没有元素满足某种条件 (至少又一个 满足返回 true  不满足 返回 false)

        eg: 判断 数组内 是否有一个元素 大于2

          const arr = [1,2,3,4,5];

          const ret = arr.some(el=>{return el > 2})

      every用来判断数组中的元素是不是都满足某种条件 (全部都要满足  满足返回 true  不满足 返回 false)

        eg: 判断 数组内 所有元素都 大于2

          const arr = [1,2,3,4,5];

          const ret = arr.every(el=>{return el > 2})

      forEach用来做遍历(除非你用forEach写出的代码更短, 否则不要用)

      find和findIndex用来寻找符合条件的元素

        eg: 查找大于5的 元素 的 值 和索引

          const arr = [2,4,6,8,10];

          const value = arr.find(el=>{ return el > 5 }); // 查找第一个大于五的值

          const index = arr.findIndex(el=>{ return el > 5 }); // 查找第一个大于五的索引

  includes

    includes用来判断数组中是不是包含某个值

    要点

      includes和indexOf的区别

        includes 返回 true or false

        indexOf  返回 找到 则返回索引  找不到则返回 -1

        eg: 判断是否不包含 2

          const arr = [1,2,3,4,5];

          const ret1 = !arr.includes(2);

          const ret2 = (arr.indexOf(2) === -1);

函数专题

  展开运算符 ...

    参数展开

    // 代替 argument

    function fn(...params){ console.log(...params) }

    // 代替剩余参数

    function fn (a, b, ...otherParams){ console.log( otherParams ) }

  参数默认值

    function fn(p1 = 'something'){

      // ...

    }

  箭头函数

    匿名函数

      const fn = function(n){ return n * 2 }

    箭头函数 用箭头函数代替了关键字 function 并自动添加关键字return

      const fn2 = (n) => n * 2

      const fn2 = (n) => { return n * 2 }

    要点

      箭头函数对于 this 指针的规定

        eg:

          function fn( n ){ return n * this.m }

          const obj = { m:3 }

          fn.call( obj, 3 ); //使用 call 指定函数中的 this 指向( 现在 this 为 obj )

        eg:

          const obj = { m:3, multiple(n){ return this.m * n } }

          obj.m = 4

          console.log( obj.multiple(2) ) // 可以将变化的东西存储在对象内

      匿名函数尽量使用箭头函数性质定义

        匿名函数内的 this 直接指向 外部 this  如果定义在 类 里 就指向这个类

        没有定义在 类里面  将会 指向 window

  bind(学名:柯里化 curry)

    bind 是 给函数绑定 this 指针 和 参数的方法

    eg:

      function fn(){ console.log(this.text) }

      fn(); //会报错 因为 this 指向的是 undefined

      // es5 内

      fn.call({ text : 1 }); // 传入 this 对象 为 { text : 1 }   call 传递参数 使用 fn.call(obj,p1,p2,p3)

      fn.apply({ text : 1 }); // 传入 this 对象 为 { text : 1 }  apply 传递参数 使用 fn.apply(obj, [p1,p2,p3])

      // es6

      // 绑定 方法的 this 对象  绑定函数内部的对象 (作用域访问不到)

      function main(){

        const obj = { text:1 }

        function fn( n ){ console.log( this.text * n ) }

        return fn.bind(obj, 10)  // fn 绑定 内部 fn 对象 并 传入 n 的值为 10

      }

      const f = main();

      f(); // 参数也可以从这里传入 但是 bind 的第二个参数不能 传入

    扩展

      javascript 中的 this 指针

        使用 apply / call / bind 进行绑定

      apply / call / bind 的 作用分别是什么

        都是绑定对象

        call 传递参数 使用 fn.call(obj,p1,p2,p3)  //call 之后直接调用方法 fn.call(obj,p1,p2,p3)

        apply 传递参数 使用 fn.apply(obj, [p1,p2,p3]) //apply 之后直接调用方法 fn.apply(obj, [p1,p2,p3])

        bind 传递参数 和 call 一样  fn.bind(obj,p1,p2,p3) // bind 之后 需要手动调用方法  fn.bind(obj,p1,p2,p3)()

3. 现代 javascript 数组专题 和 对象专题的更多相关文章

  1. JavaScript数组为什么是对象

    有过PHP编程经验的程序员学习JavaScript的时候,会发现数组也是对象,这和PHP是不同的,在PHP中数组就是数组类型,并不是是对象.究竟为什么在JavaScript中数组会是对象呢? var ...

  2. 2. 现代 javascript 新语法 及 对象专题

    let , const 和 var javascript 里面的作用域 一个大括号 是一个作用域 {  } var 会 在局部作用定义 被定义时 会提升作用域  如 if 的 {} 就属于 局部作用域 ...

  3. JavaScript 数组去重和对象相等判断

    前几天电话面试问到了数组去重和两个对象相等判断,当时回答的不是特别好,都过去好几天了,总结下. 1.数组去重 当时的问题是这样的有个简单的数组[1,1,2,3],去重后的结果是[1,2,3],怎么实现 ...

  4. Vue指令v-for之遍历输出JavaScript数组,json对象的几种方式

    定义数据: <script> new Vue({ el:"#test", data:{ message:"infor", list:["a ...

  5. 07JavaScript数组与字符串对象

    JavaScript数组与字符串对象 5.1.1数组(Array)对象 <script> //声明一个数组并赋值; var arr = new Array("aa",& ...

  6. 了解Javascript中函数作为对象的魅力

    前言 Javascript赋予了函数非常多的特性,其中最重要的特性之一就是将函数作为第一型的对象.那就意味着在javascript中函数可以有属性,可以有方法, 可以享有所有对象所拥有的特性.并且最重 ...

  7. javascript里面的数组,json对象,动态添加,修改,删除示例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  9. JavaScript 数组对象的去重

    JavaScript数组去重 1.原型去重法.通过prototype找到数组的源性对象Array,在数组的原型上添加unique()方法.需要使用的时候使用 点 " . " 进行连 ...

随机推荐

  1. POJ1088:滑雪

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 82112   Accepted: 30706 Description ...

  2. Python 中使用动态创建类属性的机制实现接口之后的依赖

    我们在自动化测试中经常会需要关联用例处理,需要动态类属性: 推荐使用第二种方法: 创建:setattr() 获取:getattr() 两种,如何创建 类属性 loan_id # 第一种,创建 # 类名 ...

  3. 记--linux 下svn安装配置,同步web目录

    安装#yum install subversion 1.创建版本库 # svnadmin create /svn/project 2.配置svn服务的配置文件svnserver.conf文件 anon ...

  4. Vue.js(24)之 弹窗组件封装

    同事封装了一个弹窗组件,觉得还不错,直接拿来用了: gif图展示: 弹框组件代码: <template> <transition name="confirm-fade&qu ...

  5. 第二阶段scrum-9

    1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 消息收发在制作

  6. 第一个flink application

    导入maven依赖 需要注意的是,如果使用scala写程序,导入的依赖跟java是不一样的 Maven Dependencies You can add the following dependenc ...

  7. v2??? 重启失败

    v2??? 重启失败, 提示 Authorization not available. Check if polkit service is running or see debug message ...

  8. GDI+3

    关于这个的例子其实网上已经有这方面的资料了,但是为了文章的完整性,还是觉得有必要讲解.我们先来看一下效果:     ( 图2 )接下来看看这是如何做到的. 思路:聊天窗体上有一个截图按钮,点击按钮后, ...

  9. Spark 内存管理

    Spark 内存管理 Spark 执行应用程序时, 会启动 Driver 和 Executor 两种 JVM 进程 Driver 负责创建 SparkContext 上下文, 提交任务, task的分 ...

  10. css布局 -双飞翼布局&圣杯布局

    一,双飞翼布局 左右两边固定,中间可以随着浏览器放大和缩小 <!DOCTYPE html> <html lang="en"> <head> &l ...