push() 功能 :向数组 的末尾添加一个或多个元素,并返回新的长度。示例 : javascript">let arr = [ 1 , 2 , 3 ] ;
let newLength = arr. push ( 4 ) ;
console. log ( arr) ;
console. log ( newLength) ;
pop() 功能 :从数组 的末尾删除一个元素,并返回该元素的值。示例 : javascript">let arr = [ 1 , 2 , 3 ] ;
let lastElement = arr. pop ( ) ;
console. log ( arr) ;
console. log ( lastElement) ;
shift() 功能 :从数组 的开头删除一个元素,并返回该元素的值。示例 : javascript">let arr = [ 1 , 2 , 3 ] ;
let firstElement = arr. shift ( ) ;
console. log ( arr) ;
console. log ( firstElement) ;
unshift() 功能 :向数组 的开头添加一个或多个元素,并返回新的长度。示例 : javascript">let arr = [ 1 , 2 , 3 ] ;
let newLength = arr. unshift ( 0 ) ;
console. log ( arr) ;
console. log ( newLength) ;
splice() 功能 :用于添加或删除数组 中的元素。它可以接受三个参数:起始索引、要删除的元素个数和要添加的元素。示例1(删除元素) : javascript">let arr = [ 1 , 2 , 3 , 4 , 5 ] ;
arr. splice ( 2 , 2 ) ;
console. log ( arr) ;
javascript">let arr = [ 1 , 2 , 3 ] ;
arr. splice ( 1 , 0 , 'a' , 'b' ) ;
console. log ( arr) ;
slice() 功能 :返回一个新的数组 ,包含从开始索引到结束索引(不包括结束索引)的元素。示例 : javascript">let arr = [ 1 , 2 , 3 , 4 , 5 ] ;
let newArr = arr. slice ( 1 , 4 ) ;
console. log ( newArr) ;
concat() 功能 :用于合并两个或多个数组 ,并返回一个新的数组 。示例 : javascript">let arr1 = [ 1 , 2 , 3 ] ;
let arr2 = [ 4 , 5 , 6 ] ;
let newArr = arr1. concat ( arr2) ;
console. log ( newArr) ;
join() 功能 :将数组 中的所有元素连接成一个字符串,返回连接后的字符串。示例 : javascript">let arr = [ 1 , 2 , 3 ] ;
let str = arr. join ( '-' ) ;
console. log ( str) ;
reverse() 功能 :颠倒数组 中元素的顺序,并返回颠倒后的数组 。示例 : javascript">let arr = [ 1 , 2 , 3 ] ;
let reversedArr = arr. reverse ( ) ;
console. log ( arr) ;
console. log ( reversedArr) ;
sort()
功能 :对数组 的元素进行排序,并返回排序后的数组 。默认情况下,它会将元素转换为字符串,然后按照Unicode码点顺序进行排序。示例 :
javascript">let arr = [ 3 , 1 , 2 ] ;
let sortedArr = arr. sort ( ) ;
console. log ( arr) ;
console. log ( sortedArr) ;
如果要按照数字大小进行排序,可以传递一个比较函数:
javascript">let arr = [ 3 , 1 , 2 ] ;
let sortedArr = arr. sort ( ( a, b ) => a - b) ;
console. log ( arr) ;
console. log ( sortedArr) ;
indexOf()
功能 :返回数组 中指定元素第一次出现的索引,如果不存在则返回 - 1。示例 :
javascript">let arr = [ 1 , 2 , 3 , 2 ] ;
let index = arr. indexOf ( 2 ) ;
console. log ( index) ;
lastIndexOf()
功能 :返回数组 中指定元素最后一次出现的索引,如果不存在则返回 - 1。示例 :
javascript">let arr = [ 1 , 2 , 3 , 2 ] ;
let index = arr. lastIndexOf ( 2 ) ;
console. log ( index) ;
forEach()
功能 :对数组 中的每个元素执行一次提供的函数。示例 :
javascript">let arr = [ 1 , 2 , 3 ] ;
arr. forEach ( ( element ) => { console. log ( element * 2 ) ;
} ) ;
map()
功能 :创建一个新数组 ,其结果是该数组 中的每个元素都调用一个提供的函数后的返回值。示例 :
javascript">let arr = [ 1 , 2 , 3 ] ;
let newArr = arr. map ( ( element ) => element * 2 ) ;
console. log ( newArr) ;
filter()
功能 :创建一个新数组 ,包含通过所提供函数实现的测试的所有元素。示例 :
javascript">let arr = [ 1 , 2 , 3 , 4 , 5 ] ;
let newArr = arr. filter ( ( element ) => element % 2 === 0 ) ;
console. log ( newArr) ;
reduce()
功能 :对数组 中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。示例 :
javascript">let arr = [ 1 , 2 , 3 , 4 ] ;
let sum = arr. reduce ( ( accumulator, currentValue ) => accumulator+ currentValue, 0 ) ;
console. log ( sum) ;
find()
功能 :返回数组 中满足提供的测试函数的第一个元素的值。如果没有找到,则返回undefined
。示例 :
javascript">let arr = [ 5 , 12 , 8 , 130 , 44 ] ;
let found = arr. find ( ( element ) => element > 10 ) ;
console. log ( found) ;
findIndex()
功能 :返回数组 中满足提供的测试函数的第一个元素的索引。如果没有找到,则返回 - 1。示例 :
javascript">let arr = [ 5 , 12 , 8 , 130 , 44 ] ;
let index = arr. findIndex ( ( element ) => element > 10 ) ;
console. log ( index) ;
every()
功能 :测试一个数组 内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。示例 :
javascript">let arr = [ 1 , 2 , 3 , 4 , 5 ] ;
let allGreaterThanZero = arr. every ( ( element ) => element > 0 ) ;
console. log ( allGreaterThanZero) ;
some()
功能 :测试数组 中是不是至少有一个元素通过了被提供的函数测试。它返回一个布尔值。示例 :
javascript">let arr = [ 1 , 2 , 3 , 4 , 5 ] ;
let atLeastOneEven = arr. some ( ( element ) => element % 2 === 0 ) ;
console. log ( atLeastOneEven) ;
includes()
功能 :用来判断一个数组 是否包含一个指定的值,返回布尔值。示例 :
javascript">let arr = [ 1 , 2 , 3 ] ;
let hasTwo = arr. includes ( 2 ) ;
console. log ( hasTwo) ;
flat()
功能 :会按照一个可指定的深度递归遍历数组 ,并将所有元素与遍历到的子数组 中的元素合并为一个新数组 返回。示例 :
javascript">let arr = [ 1 , 2 , [ 3 , 4 ] ] ;
let flattened = arr. flat ( ) ;
console. log ( flattened) ;
javascript">let arr = [ 1 , 2 , [ 3 , [ 4 , 5 ] ] ] ;
let flattened = arr. flat ( 2 ) ;
console. log ( flattened) ;
flatMap()
功能 :首先使用映射函数映射每个元素,然后将结果压缩成一个新数组 。它与map
后再flat
的效果相同,但flatMap
通常更高效。示例 :
javascript">let arr = [ 1 , 2 , 3 ] ;
let newArr = arr. flatMap ( ( x ) => [ x * 2 ] ) ;
console. log ( newArr) ;
entries()
功能 :返回一个新的Array Iterator
对象 ,该对象 包含数组 中每个索引的键/值对。示例 :
javascript">let arr = [ 'a' , 'b' , 'c' ] ;
let iterator = arr. entries ( ) ;
for ( let [ index, element] of iterator) { console. log ( index, element) ;
}
keys()
功能 :返回一个包含数组 中每个索引的Array Iterator
对象 。示例 :
javascript">let arr = [ 'a' , 'b' , 'c' ] ;
let iterator = arr. keys ( ) ;
for ( let key of iterator) { console. log ( key) ;
}
values()
功能 :返回一个新的Array Iterator
对象 ,该对象 包含数组 中每个索引的值。示例 :
javascript">let arr = [ 'a' , 'b' , 'c' ] ;
let iterator = arr. values ( ) ;
for ( let value of iterator) { console. log ( value) ;
}
类数组 遍历 什么是类数组 :类数组 对象 是一个拥有length
属性和若干索引属性的对象 ,但它没有数组 的方法,如slice
、map
等。常见的类数组 对象 有arguments
对象 (在函数内部)和DOM
节点列表。应用场景和示例 - 使用for
循环遍历arguments
对象 场景描述 :在一个函数中,需要处理不定数量的参数,arguments
对象 可以获取这些参数,通过遍历arguments
可以对每个参数进行操作。示例代码 : javascript">function sum ( ) { let result = 0 ; for ( let i = 0 ; i < arguments. length; i++ ) { result += arguments[ i] ; } return result;
}
console. log ( sum ( 1 , 2 , 3 ) ) ;
应用场景和示例 - 使用Array.from
方法将类数组 转换为数组 后遍历 场景描述 :当想使用数组 的方法(如forEach
)来遍历类数组 对象 时,可以先将其转换为数组 。Array.from
方法可以将类数组 对象 或可迭代对象 转换为真正的数组 。示例代码 : javascript">let domList = document. getElementsByTagName ( 'div' ) ;
let divArray = Array. from ( domList) ;
divArray. forEach ( ( div ) => { console. log ( div) ;
} ) ;
对象 遍历 应用场景和示例 - 使用for...in
循环遍历对象 的可枚举属性 场景描述 :当需要获取对象 的所有可枚举属性(包括继承的可枚举属性)并进行操作时,如打印属性名和属性值,for...in
循环很有用。示例代码 : javascript">let person = { name : 'John' , age : 30 , city : 'New York'
} ;
for ( let key in person) { console. log ( key + ': ' + person[ key] ) ;
}
应用场景和示例 - 使用Object.keys
获取对象 属性名数组 后遍历 场景描述 :如果只想获取对象 自身的可枚举属性名,而不包括继承的属性名,Object.keys
方法返回一个由对象 自身可枚举属性名组成的数组 。然后可以使用数组 的遍历方法(如forEach
)来操作这些属性。示例代码 : javascript">let person = { name : 'John' , age : 30 , city : 'New York'
} ;
let keys = Object. keys ( person) ;
keys. forEach ( ( key ) => { console. log ( key + ': ' + person[ key] ) ;
} ) ;
应用场景和示例 - 使用Object.values
获取对象 属性值数组 后遍历 场景描述 :当只关心对象 的属性值,并且想对这些属性值进行操作(如求和、查找最大值等)时,Object.values
方法返回一个由对象 自身可枚举属性值组成的数组 ,然后可以用数组 的遍历方法来处理。示例代码 : javascript">let person = { salary1 : 5000 , salary2 : 6000 , salary3 : 7000
} ;
let values = Object. values ( person) ;
let sum = 0 ;
values. forEach ( ( value ) => { sum += value;
} ) ;
console. log ( sum) ;
应用场景和示例 - 使用Object.entries
获取对象 属性名 - 值对数组 后遍历 场景描述 :如果需要同时获取对象 的属性名和属性值,并且以键值对的形式进行操作,Object.entries
方法返回一个包含对象 自身可枚举属性的键值对数组 。可以使用forEach
或者for...of
循环来遍历这个数组 。示例代码 : javascript">let person = { name : 'John' , age : 30 , city : 'New York'
} ;
let entries = Object. entries ( person) ;
entries. forEach ( ( [ key, value] ) => { console. log ( key + ': ' + value) ;
} ) ;
Object.getOwnPropertyNames()
方法遍历 功能 :该方法返回一个由指定对象 的所有自身属性的属性名(包括不可枚举属性)组成的数组 。与Object.keys()
不同的是,它会包含不可枚举属性。示例 : javascript">let obj = { } ;
Object. defineProperty ( obj, 'hiddenProperty' , { value : 'secret' , enumerable : false
} ) ;
let propertyNames = Object. getOwnPropertyNames ( obj) ;
console. log ( propertyNames) ;
应用场景 :当需要获取对象 的所有自身属性,包括那些不应该在for...in
循环或者Object.keys()
中显示的不可枚举属性时,就可以使用Object.getOwnPropertyNames()
。例如,在一些需要完整属性列表的调试工具或者序列化函数中很有用。 使用Reflect.ownKeys()
遍历 功能 :Reflect.ownKeys()
方法返回一个由目标对象 自身的所有属性键(包括字符串和符号属性,不管是可枚举还是不可枚举)组成的数组 。示例 : javascript">let symbolKey = Symbol ( 'key' ) ;
let obj = { normalProp : 'value' , [ symbolKey] : 'symbolValue'
} ;
let allKeys = Reflect. ownKeys ( obj) ;
console. log ( allKeys) ;
应用场景 :在处理可能包含符号属性或者需要获取对象 所有属性键(不管枚举性和类型)的复杂场景下非常有用。比如,在实现对象 的深度克隆功能时,需要完整地复制对象 的所有属性,包括符号属性,Reflect.ownKeys()
就能派上用场。 使用for...of
循环结合Object.entries()
的替代方式 - 自定义迭代器(Symbol.iterator) 功能 :可以在对象 的原型上定义Symbol.iterator
方法,使对象 可迭代。这样就可以使用for...of
循环来遍历对象 ,就像遍历数组 一样。示例 : javascript">let myObject = { a : 1 , b : 2 , c : 3 , [ Symbol. iterator] : function ( ) { let keys = Object. keys ( this ) ; let index = 0 ; return { next : ( ) => { if ( index < keys. length) { let key = keys[ index] ; index++ ; return { value : [ key, this [ key] ] , done : false } ; } else { return { done : true } ; } } } ; }
} ;
for ( let [ key, value] of myObject) { console. log ( key, value) ;
}
应用场景 :当希望对象 能够像数组 、集合等可迭代类型一样被for...of
循环遍历,并且可以自定义遍历的顺序和逻辑时,这种方式很有用。比如,在实现一个自定义的数据结构,它具有类似对象 的属性存储方式,但又希望有特殊的遍历行为时,就可以使用这个方法。