函数的argument为什么不是数组?如何转化成数组?
- argument对象:(argument为什么不是数组)
- 在ES中参数在内部都是由数组来表示的,也就是说传递给函数的始终都是数组;而在函数中可以用argument对象来访问这个参数数组,从而传递给函数每一个参数。
- argument对象并不属于Array实例,因为可以用方括号语法访问他的每一个元素;且本身并不可以调用数组方法。
- 如何转化成数组?
- Array.prototype.slice.call();
- Array.from();
- ES6展开运算符;
- 利用cancat+apply;
forEach遍历对象,如何解决return无效
- try catch 在符合调节出抛出异常;
- some和every代替forEach;
JS判断数组中是否包含某个值
- array.indexOf:如果存在返回数组下标,不存在返回-1;
- array.includes(searchElement,[,fromIndex]):存在返回true,否则false;
- array.find(callback[,thisArg]):存在返回该元素,否则undefined;
- array.findIndex(callback,[,thisArg]):存在返回第一个满足的元素下标,否则-1;
数组扁平化
- ES6的 flat 方法
- replace + split
- replace + JSON.parse()
- 普通递归
- reduce函数迭代
- 扩展运算符
手写深拷贝(自己写的玩的,不在文章中)
高阶函数
- 概念:一个函数可以接受另一个函数作为参数或者返回值为一个函数。
- 数组中的高阶函数
-
map
- 参数: 回调函数、回调函数的this值(可选);其中回调函数被默认传入三个值:当前元素、当前索引、整个数组。
- 创建一个新数组。
- 不影响原数组。
-
reduce
- 参数: 接受两个参数,一个为回调函数,一个为初始值;其中回调函数中三个默认参数:积累值、当前值、整个数组。
-
filter
- 参数:一个函数参数。这个函数接受一个默认参数,就是当前元素;返回值为布尔类型,决定元素是否保留;
-
sort
- 参数:一个用于比较的函数。两个默认参数:代表比较的两个元素。
- 参数:一个用于比较的函数。两个默认参数:代表比较的两个元素。
new一个对象的过程
- 创建一个新对象;
- 新对象_protp_属性指向构造函数的原型对象;
- 为this赋值;
- 返回this指向的新对象;
bind、call、apply
- bind;
- 对于普通函数绑定this指向;
- 对于构造函数,要确保原函数的原型对象上的属性不能丢失;
- call;
- 改变函数this指向,参数为参数列表;并执行函数
- apply;
- 改变函数this指向,参数为包含参数的数组。
对this的理解
- 全局上下文
- 默认:this -> windows
- 严格模式下 -> undefined
- 直接调用对象
- 相当于全局上下文
- 对象.方法的形式调用
- this指向这个对象
- DOM事件绑定
- onclick和addEventListener,this指向绑定事件的对象;
- IE中,attachEvent,this指向Windows
- new构造函数绑定
- 指向构造函数中的实例对象
- 箭头函数
- 没有this,指向最近的非箭头函数的this,找不到就是Windows。
- 严格模式下:undefined;