JavaScript:
数组:
数组迭代方法map、filter、forEach,some,every有哪些相同点和不同点?
map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
map():也返回一个数组,而这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果;
forEach():对数组中的每一项运行给定函数,这个方法并没有返回值 ;
Filter():方法是对原数组进行过滤筛选,返回一个新的数组
filter():不会对空数组进行检测(如果对空数组进行筛选,返回值位undefined)
如何通过JS判断一个数组?
instanceof
方
instanceof
运算符是用来测试一个对象是否在其原型链原型构造函数的属性var arr = []; arr instanceof Array; // true
constructor
方法constructor
属性返回对创建此对象的数组函数的引用,就是返回对象相对应的构造函数var arr = []; arr.constructor == Array; //true
ES5
新增方法isArray()
var a = new Array(123); var b = new Date(); console.log(Array.isArray(a)); //true console.log(Array.isArray(b)); //false
数组方法:
join() 方法也可将所有数组元素结合为一个字符串。
pop() 方法从数组中删除最后一个元素:
push() 方法(在数组结尾处)向数组添加一个新的元素:
shift() 方法会删除首个数组元素,并把所有其他元素“位移”到更低的索引。返回被“位移出”的字符串:
unshift() 方法(在开头)向数组添加新元素,并“反向位移”旧元素;返回新数组的长度。
splice() 方法可用于向数组添加新项:
第一个参数()定义了应添加新元素的位置(拼接)。
第二个参数()定义应删除多少元素。
其余参数()定义要添加的新元素。
splice() 方法返回一个包含已删除项的数组
concat() 方法通过合并(连接)现有数组来创建一个新数组:
concat() 方法不会更改现有数组。它总是返回一个新数组。
slice() 方法用数组的某个片段切出新数组。不会影响原数组
length() 返回数组数量
reverse() 方法反转数组中的元素。
sort() 方法以字母顺序对数组进行排序:
循环:
forEach() 方法为每个数组元素调用一次函数(回调函数)
map() 方法通过对每个数组元素执行函数来创建新数组。
map() 方法不会对没有值的数组元素执行函数。
map() 方法不会更改原始数组。
filter() 方法创建一个包含通过测试的数组元素的新数组。
reduce() 方法在每个数组元素上运行函数,以生成(减少它)单个值。
reduce() 方法在数组中从左到右工作。另请参阅 reduceRight()。
reduce() 方法不会减少原始数组。
some:
every:
--- --- --- ---
函数:
什么是函数?
JavaScript 函数通过 function 关键词进行定义,其后是函数名和括号 ()。
为何使用函数?
只要定义一次代码,就可以多次调用它。
够多次向同一函数传递不同的参数,以产生不同的结果。
函数什么时候会停止?
当 JavaScript 到达 return 语句,函数将停止执行。
什么是局部变量?
在 JavaScript 函数中声明的变量,会成为函数的局部变量。
递归:
定义:
函数调用函数,要有结束语句
1.在定义一个过程或函数时,出现直接或间接调用自己的成分,称之为递归。
2.直接调用自己称为直接递归间接调用自己称为间接递归
3.如果一个递归函数中调用递归语句是最后一条执行语句,则称这种递归调用为尾递归。递归的条件:
(1)需要解决的问题可以转化为一个或者多个子问题来求解,而这些子问题的求解方法与原问题相同,只是在数量和规模上不同。
(2)递归的次数是有限的。
(3)必须有结束递归的条件来终止递归。
优点:
1、代码简洁
2、易于理解
缺点:
1、时间和空间的消耗比较大
2、重复计算
3、调用栈溢出
常用地点:
斐波拉契数列,求和,爬楼梯,深拷贝,递归组件,城市分布图
回调函数:
回调函数就是一个被作为参数传递的函数
闭包函数:
当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返回的这个函数在外部被执行,就产生了闭包
常用场景:节流和防抖
节流:
定义:当持续触发事件时,保证一定时间段内只调用一次事件处理函数.
理解:点击之后触发,但下一次触发要和上一次触发有时间间隔