JS 有几种遍历数组的方法,forEach 和 map 有什么区别?
-
for
-
forEach
-
map
-
filter
-
for…of(缺点:没有索引)
-
find(遍历数组,找到第一个符合条件的项,并返回该项;不会继续遍历数组;否则返回undefined
)
[1,5,10,15].find(function(value,index,arr){ return value > 9 }) //10 -
findIndex(遍历数组找到第一个符合条件的项,并返回该项的索引值;不会继续遍历数组;否则返回-1。
)
[1,5,10,15].findIndex(function(value,index,arr){ return value > 9 }) //2 -
Array.some()(
1)如果有一个元素满足条件,则表达式返回true,剩余的元素不会再执行检测。
2)如果没有满足条件的元素,则返回false。
3)返回值是布尔值)
var ages = [3, 18, 17, 16]
var checkoutVal = function checkout (age) {
console.log(age >= 18) // false true 有一个满足条件的会停止检测剩余的元素
return age >= 18
}console.log(ages.some(checkoutVal)) // true
————————————————
let someArr = [2,3,4]; let someResult = someArr.some((item, index)=>{ return item > 3 }); console.log(someResult); // 结果为: true -
Array.every()
1)如果数组中有一个元素不满足,则整个表达式返回false;且剩余的元素不会再进行检测
2)如果所有元素都满足条件,则返回true。
3)返回值是布尔值
var ages = [3, 18, 17, 16] const fn = (currentValue) => currentValue < 40 console.log(ages.every(fn)) // true 值全都符合函数条件
let everyArr = [2,3,4]; let everyResult = everyArr.every((item, index)=>{ return item > 0 }); console.log(everyResult); // 结果为: true -
reduce()
1)接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。
2)第二个参数作为第一次调用的a的值
// reducer
let reduceArr = [0,1,2,3,4]
let reduceResult = reduceArr.reduce((a, b)=>{
return a + b;
});
console.log(reduceResult);
// 结果: 10
————————————————
不同点
1) map()会分配内存空间存储新数组并返回,forEach()不会返回数据。
2) forEach()允许callback更改原始数组的元素,map()返回新的数组,map() 不会对空数组进行检测。
JS 的 new 操作符做了哪些事情?如何改变 this 的指向?
// 1.创建一个空对象 // 2.更改它的原型链 // 3.改变this指向 // 4.判断返回值类型
在函数内部使用 _this = this
使用 apply、call、bind