数组专题

  展开运算符

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

    数组展开的妙用 ...

    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. P1046 划拳

    P1046 划拳 转跳点:

  2. Codeforces735D Taxes(哥德巴赫猜想)

    题意:已知n元需缴税为n的最大因子x元.现通过将n元分成k份的方式来减少缴税.问通过这种处理方式需缴纳的税费. 分析: 1.若n为素数,不需分解,可得1 2.若n为偶数,由哥德巴赫猜想:一个大于2的偶 ...

  3. 从ofo牵手理财平台看,用户隐私数据的使用有底线吗?

    智慧生活的到来既是社会变迁的拐点,又不可避免地带来一种挥之不去的焦虑.这种焦虑的由来,是因个人隐私数据在智慧生活下变成一种"黑暗财富".随着相关数据挖掘.收集.分析技术的成熟,人们 ...

  4. 3 —— node —— 文件追加内容

    思想 : 先读取 , 再追加 const fs = require('fs') fs.readFile("./hello.txt","utf-8",(err,d ...

  5. eclipse中svn重新设置账户

    查看svn版本:windows > preference > Team > SVN 1.如果svn插件是svnkit版 只需找到.keyring文件,一般目录是:eclipse安装目 ...

  6. segger rtt 输出 log

    调试 mcu 的时候,使用 jlink 的 rtt 可以方便的输出信息. 输出有两种模式, client 和 logger. client 必须依附其他程序,比如说 mdk 调试状态,或者 logge ...

  7. jedis的ShardedJedisPool链接池的扩容问题

    回顾上一篇文章jedis连接池的构建. 我们来分析ShardedJedisPool的基于客户端分片所可能带来的问题:扩容 ShardedJedisPool的节点扩容 .ShardedJedisPool ...

  8. centos破解压缩文件密码

    rarcrack是linux系统端的一款破解加密压缩包的工具,rarcrack使用的穷举法进行破解已经加密的rar.zip和7z压缩包,支持设置多线程,和文件类型进行破解. 1.rarcrack下载页 ...

  9. phi

    给定 \(T\) 个正整数 \(n\) ,对于每个 \(n\) ,输出做小的 \(m\) ,使得 \(\phi (m)\ge n\). 思路1:搞个线性欧拉函数筛,后缀最大值,二分查找 思路2:直接求 ...

  10. 面向对象-接口(interface)实战案例

    面向对象-接口(interface)实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口(interface)概述 1>.接口的语法格式 接口时抽象类的一种特殊体 ...