JS总结笔记(@神三元灵魂之问中)

450 阅读3分钟

函数的argument为什么不是数组?如何转化成数组?

  1. argument对象:(argument为什么不是数组)
  • 在ES中参数在内部都是由数组来表示的,也就是说传递给函数的始终都是数组;而在函数中可以用argument对象来访问这个参数数组,从而传递给函数每一个参数。
  • argument对象并不属于Array实例,因为可以用方括号语法访问他的每一个元素;且本身并不可以调用数组方法
  1. 如何转化成数组?
  • Array.prototype.slice.call();
  • Array.from();
  • ES6展开运算符;
  • 利用cancat+apply;

forEach遍历对象,如何解决return无效

  1. try catch 在符合调节出抛出异常;
  2. some和every代替forEach;

JS判断数组中是否包含某个值

  1. array.indexOf:如果存在返回数组下标,不存在返回-1;
  2. array.includes(searchElement,[,fromIndex]):存在返回true,否则false;
  3. array.find(callback[,thisArg]):存在返回该元素,否则undefined;
  4. array.findIndex(callback,[,thisArg]):存在返回第一个满足的元素下标,否则-1;

数组扁平化

  1. ES6的 flat 方法
  2. replace + split
  3. replace + JSON.parse()
  4. 普通递归
  5. reduce函数迭代
  6. 扩展运算符

手写深拷贝(自己写的玩的,不在文章中)

高阶函数

  • 概念:一个函数可以接受另一个函数作为参数或者返回值为一个函数。
  1. 数组中的高阶函数
  • map

    • 参数: 回调函数、回调函数的this值(可选);其中回调函数被默认传入三个值:当前元素、当前索引、整个数组。
    • 创建一个新数组。
    • 不影响原数组。
  • reduce

    • 参数: 接受两个参数,一个为回调函数,一个为初始值;其中回调函数中三个默认参数:积累值、当前值、整个数组。
  • filter

    • 参数:一个函数参数。这个函数接受一个默认参数,就是当前元素;返回值为布尔类型,决定元素是否保留;
  • sort

    • 参数:一个用于比较的函数。两个默认参数:代表比较的两个元素。

new一个对象的过程

  1. 创建一个新对象;
  2. 新对象_protp_属性指向构造函数的原型对象;
  3. 为this赋值;
  4. 返回this指向的新对象;

bind、call、apply

  1. bind;
  • 对于普通函数绑定this指向;
  • 对于构造函数,要确保原函数的原型对象上的属性不能丢失;
  1. call;
  • 改变函数this指向,参数为参数列表;并执行函数
  1. apply;
  • 改变函数this指向,参数为包含参数的数组。

对this的理解

  1. 全局上下文
  • 默认:this -> windows
  • 严格模式下 -> undefined
  1. 直接调用对象
  • 相当于全局上下文
  1. 对象.方法的形式调用
  • this指向这个对象
  1. DOM事件绑定
  • onclick和addEventListener,this指向绑定事件的对象;
  • IE中,attachEvent,this指向Windows
  1. new构造函数绑定
  • 指向构造函数中的实例对象
  1. 箭头函数
  • 没有this,指向最近的非箭头函数的this,找不到就是Windows。
  • 严格模式下:undefined;