Js中Array对象

JavaScriptArray对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。

描述

JavaScript中通常可以使用Array构造器与字面量的方式创建数组。

console.log(Array(3)); // (3) [empty × 3]
console.log(new Array(3)); // (3) [empty × 3]
console.log([,,,]); // (3) [empty × 3]

JavaScript的数组是以稀疏数组的形式存在的,可以认为其是能够按照索引值来排序的特殊对象,所以当在某些位置没有值时,就需要使用某个值去填充。当然对于稀疏数组在各种浏览器中会存在优化的操作,例如在V8引擎中就存在快数组与慢数组的转化,此外在V8中对于empty的描述是一个空对象的引用。在Js中使用Array构造器创建出的存在空位的问题,默认并不会以undefined填充,而是以empty作为值,需要注意的是,空位并不是undefinedundefined表示的是没有定义,但是本身undefined就是一个基本数据类型,是一个值,而是empty表示了该处没有任何值,是一个完全为空的位置,此外ES6ES6中对于空位的处理是不同的,所以有些方法会跳过empty,有些方法会将empty作为undefined处理,所以还是要尽量避免出现空位。

console.log([,,,]); // (3) [empty × 3]
console.log(new Array(3)); // (3) [empty × 3]
console.log([undefined, undefined, undefined]); // (3) [undefined, undefined, undefined]
console.log(0 in [undefined, undefined, undefined]); // true
console.log(0 in [,,,]); // false // in 是检查索引 此处表示 0 位置是没有值的

属性

  • Array.length: lengthArray的实例属性,返回或设置一个数组中的元素个数,该值是一个无符号32-bit整数即02^32-1的整数,并且总是大于数组最高项的下标。可以通过设置length属性的值来截断任何数组,当通过改变length属性值来扩展数组时,实际元素的数目将会增加,如果传入的值超出有效值,则会抛出RangeError异常。此外如果将数组中索引设置为-1或者字符串等,数组的length不会发生改变,此时数组中的这些索引将作为对象的属性处理,实际上数组就是可以按照索引值来排序的数据集合,是一种特殊的对象。
  • Array.prototype[@@unscopables]: Symbol属性@@unscopable包含了所有ES2015 (ES6)中新定义的、且并未被更早的ECMAScript标准收纳的属性名,这些属性被排除在由with语句绑定的环境中,即防止某些数组方法被添加到with语句的作用域内,使用Array.prototype[Symbol.unscopables]查看with绑定中未包含的数组默认属性。

方法

Array.from()

Array.from(arrayLike[, mapFn[, thisArg]])
arrayLike 想要转换成数组的伪数组对象或可迭代对象。
mapFn 可选 如果指定了该参数,新数组中的每个元素会执行该回调函数。
thisArg可选 执行回调函数mapFnthis对象。
Array.from()方法从一个类似数组或可迭代对象创建一个新的数组实例。

console.log(Array.from("123")); // (3) ["1", "2", "3"]
console.log(Array.from([,,,])); // (3) [undefined, undefined, undefined] //将 empty 处理为 undefined
console.log(Array.from({length: 3})); // (3) [undefined, undefined, undefined]

Array.isArray()

Array.isArray(obj)
Array.isArray()用于确定传递的值是否是一个Array

console.log(Array.isArray([])); // true
console.log(Array.isArray(Array())); // true
console.log(Array.isArray(new Array())); // true
console.log(Array.isArray(new Uint8Array(32))); // false
console.log(Array.isArray(Array.prototype)); // true // Array.prototype 是一个数组
console.log(Array.isArray({ __proto__: Array.prototype })); // false // 不是检测原型链 与 instanceof 不同/**
Polyfillif (!Array.isArray) {Array.isArray = function(arg) {return Object.prototype.toString.call(arg) === '[object Array]';};}
*/

Array.of()

Array.of(element0[, element1[, ...[, elementN]]])
elementN 任意个参数,将按顺序成为返回数组中的元素。
Array.of()方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型,Array.of()Array构造函数之间的区别在于处理整数参数,例如Array.of(7)创建一个具有单个元素7的数组,而Array(7)创建一个长度为7的空数组。

console.log(Array.of(1));         // [1]
console.log(Array.of(1, 2, 3));   // (3) [1, 2, 3]
console.log(Array.of(undefined)); // [undefined]

Array.prototype.concat()

var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
valueN 可选,将数组和/或值连接成新数组,如果省略了valueN参数参数,则concat会返回一个它所调用的已存在的数组的浅拷贝。
concat()方法用于合并两个或多个数组,此方法不会更改现有数组,而是返回一个新数组。

var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];
var arr3 = arr1.concat(arr2);console.log(arr3); // [1, 2, 3, 4, 5, 6]
console.log(arr1); // [1, 2, 3] // 不改变原数组

Array.prototype.copyWithin()

arr.copyWithin(target[, start[, end]])
target0为基底的索引,复制序列到该位置。如果是负数,target将从末尾开始计算。
如果target大于等于arr.length,将会不发生拷贝。如果targetstart之后,复制的序列将被修改以符合arr.length
start0为基底的索引,开始复制元素的起始位置,如果是负数,start将从末尾开始计算,如果start被忽略,copyWithin将会从0开始复制。
end0为基底的索引,开始复制元素的结束位置,copyWithin将会拷贝到该位置,但不包括end这个位置的元素。如果是负数,end将从末尾开始计算。如果end被忽略,copyWithin方法将会一直复制至数组结尾,默认为arr.length
copyWithin()方法浅拷贝数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。

var arr = [1, 2, 3, 4, 5, 6];
console.log(arr.copyWithin(0, 2, 5)); // [3, 4, 5, 4, 5, 6] // 将索引为2到5的值浅拷贝到以0为索引的位置
console.log(arr); // [3, 4, 5, 4, 5, 6] // 改变原数组 不改变原数组长度

Array.prototype.entries()

arr.entries()
entries()方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对,Array Iterator对象的原型__proto__:Array Iterator上有一个next方法,可用用于遍历迭代器取得原数组的[key,value]

var arr = ['a', 'b', 'c'];
console.log(arr.entries().next().value); // [0, "a"]
console.log(arr); // ["a", "b", "c"] // 不改变原数组

Array.prototype.every()

arr.every(callback[, thisArg])
callback 为数组中每个元素执行的函数,该函数接收一至三个参数。
currentValue 数组中正在处理的当前元素。
index 可选 数组中正在处理的当前元素的索引。
array 可选 正在操作的数组。
thisArg 可选 当执行回调函数callback时,用作this的值,注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this值。
every()方法测试一个数组内的所有元素是否都能通过某个指定函数的测试,它返回一个布尔值。

var arr = [1, 2, 3, 4, 5];
console.log(arr.every( currentValue => currentValue > 1)) // false
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.fill()

arr.fill(value[, start[, end]])
value 用来填充数组元素的值。
start 可选 起始索引,默认值为0
end 可选 终止索引,默认值为this.length
fill()方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素,不包括终止索引。

var arr = [1, 2, 3, 4, 5];
console.log(arr.fill(0, 0, 5)); // [0, 0, 0, 0, 0]
console.log(arr); // [0, 0, 0, 0, 0] // 改变原数组

Array.prototype.filter()

arr.filter(callback(currentValue [, index [, array]])[, thisArg])
callback 为数组中每个元素执行的函数,该函数接收一至三个参数。
currentValue 数组中正在处理的当前元素。
index 可选 数组中正在处理的当前元素的索引。
array 可选 正在操作的数组。
thisArg 可选 当执行回调函数callback时,用作this的值,注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this值。
filter()方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

var arr = [1, 2, 3, 4, 5];
console.log(arr.filter( currentValue => currentValue > 2 )); // [3, 4, 5]
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.find()

arr.find(callback(currentValue [, index [, array]])[, thisArg])
callback 为数组中每个元素执行的函数,该函数接收一至三个参数。
currentValue 数组中正在处理的当前元素。
index 可选 数组中正在处理的当前元素的索引。
array 可选 正在操作的数组。
thisArg 可选 当执行回调函数callback时,用作this的值,注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this值。
find()方法返回数组中满足提供的测试函数的第一个元素的值,否则返回undefined

var arr = [1, 2, 3, 4, 5];
console.log(arr.find( currentValue => currentValue > 2 )); // 3
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.findIndex()

arr.findIndex(callback(currentValue [, index [, array]])[, thisArg])
callback 为数组中每个元素执行的函数,该函数接收一至三个参数。
currentValue 数组中正在处理的当前元素。
index 可选 数组中正在处理的当前元素的索引。
array 可选 正在操作的数组。
thisArg 可选 当执行回调函数callback时,用作this的值,注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this值。
findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引,否则返回-1

var arr = [1, 2, 3, 4, 5];
console.log(arr.findIndex( currentValue => currentValue > 2 )); // 2
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.flat()

var newArray = arr.flat([depth])
depth 可选 指定要提取嵌套数组的结构深度,默认值为 1。
flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

var arr = [1, 2, [3, 4, [5]]];
console.log(arr.flat(2)); // [1, 2, 3, 4, 5]
console.log(arr); // [1, 2, [3, 4, [5]]] // 不改变原数组

Array.prototype.flatMap()

arr.flatMap(callback(currentValue [, index [, array]])[, thisArg])
callback 为数组中每个元素执行的函数,该函数接收一至三个参数。
currentValue 数组中正在处理的当前元素。
index 可选 数组中正在处理的当前元素的索引。
array 可选 被调用的map数组。
thisArg 可选 当执行回调函数callback时,用作this的值,注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this值。
flatMap()方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与map 连着深度值为1flat几乎相同,但flatMap通常在合并成一种方法的效率稍微高一些。

var arr = [[1], [2], [3], [4], [5]];
console.log(arr.flatMap( currentValue => currentValue *2 )); // [2, 4, 6, 8, 10] // 首先调用映射map,再扁平化为新数组
console.log(arr); // [[1], [2], [3], [4], [5]] // 不改变原数组

Array.prototype.forEach()

arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
callback 为数组中每个元素执行的函数,该函数接收一至三个参数。
currentValue 数组中正在处理的当前元素。
index 可选 数组中正在处理的当前元素的索引。
array 可选 正在操作的数组。
thisArg 可选 当执行回调函数callback时,用作this的值,注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this值。
forEach()方法对数组的每个元素执行一次给定的函数。
注意如果想在遍历执行完之前结束遍历,那么forEachmap并不是好的选择。

var arr = [1, 2, 3, 4, 5];
var obj = { a: 1 }; // 定义obj为了演示this用
arr.forEach( function(currentValue,index,array) {console.log("当前值",currentValue);console.log("当前值索引",index);console.log("当前处理数组",array);console.log("当前this指向",this);console.log("结束一次回调,无需返回值");console.log("");
},obj);
/*当前值 1当前值索引 0当前处理数组 (5)[1, 2, 3, 4, 5]当前this指向 {a: 1}结束一次回调,无需返回值当前值 2当前值索引 1当前处理数组 (5)[1, 2, 3, 4, 5]当前this指向 {a: 1}结束一次回调,无需返回值...........
*/
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.includes()

arr.includes(valueToFind[, fromIndex])
valueToFind 需要查找的元素值。
fromIndex 可选 从fromIndex索引处开始查找valueToFind,如果为负值,则按升序从array.length + fromIndex的索引开始搜,即使从末尾开始往前跳fromIndex的绝对值个索引,然后往后搜寻,默认为0
includes()方法用来判断一个数组是否包含一个指定的值,如果包含则返回true,否则返回false

var arr = [1, 2, 3, 4, 5];
console.log(arr.includes(2)); // true
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.indexOf()

arr.indexOf(searchElement[, fromIndex])
searchElement 需要查找的元素值。
fromIndex 可选 从fromIndex索引处开始查找valueToFind,如果为负值,则按升序从array.length + fromIndex的索引开始搜,即使从末尾开始往前跳fromIndex的绝对值个索引,然后往后搜寻,默认为0
indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1

var arr = [1, 2, 3, 4, 5];
console.log(arr.indexOf(2)); // 1
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.join()

arr.join([separator])
separator 可选 指定一个字符串来分隔数组的每个元素,如果需要,将分隔符转换为字符串,如果缺省该值,数组元素用逗号,分隔。
join()方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。

var arr = ['a', 'b', 'c'];
console.log(arr.join('&')); // a&b&c
console.log(arr); // ["a", "b", "c"] // 不改变原数组

Array.prototype.keys()

arr.keys()
keys()方法返回一个包含数组中每个索引键的Array Iterator对象。

var arr = [1, 2, 3, 4, 5];
console.log(arr.keys().next().value); // 0
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.lastIndexOf()

arr.lastIndexOf(searchElement[, fromIndex])
searchElement 被查找的元素。
fromIndex 可选 从此位置开始逆向查找,默认为数组的长度减1arr.length - 1,整个数组都被查找。如果该值大于或等于数组的长度,则整个数组会被查找。如果为负值,将其视为从数组末尾向前的偏移。即使该值为负,数组仍然会被从后向前查找。如果该值为负时,其绝对值大于数组长度,则方法返回-1,即数组不会被查找。
lastIndexOf()方法返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从fromIndex处开始。

var arr = [1, 2, 3, 2, 1];
console.log(arr.lastIndexOf(2)); // 3
console.log(arr); // [1, 2, 3, 2, 1] // 不改变原数组

Array.prototype.map()

arr.map(callback(currentValue [, index [, array]])[, thisArg])
callback 为数组中每个元素执行的函数,该函数接收一至三个参数。
currentValue 数组中正在处理的当前元素。
index 可选 数组中正在处理的当前元素的索引。
array 可选 正在操作的数组。
thisArg 可选 当执行回调函数callback时,用作this的值,注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this值。
map()方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值。

var arr = [1, 2, 3, 4, 5];
var obj = { a: 1 }; // 定义obj为了演示this用
var newArr = arr.map( function(currentValue,index,array) {console.log("当前值",currentValue);console.log("当前值索引",index);console.log("当前处理数组",array);console.log("当前this指向",this);console.log("");return currentValue + 10; // 将arr值加10返回成为新数组
},obj);
console.log(newArr); // [11, 12, 13, 14, 15]
/*当前值 1当前值索引 0当前处理数组 (5)[1, 2, 3, 4, 5]当前this指向 {a: 1}当前值 2当前值索引 1当前处理数组 (5)[1, 2, 3, 4, 5]当前this指向 {a: 1}...........
*/
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.pop()

arr.pop()
pop()方法从数组中删除最后一个元素,并返回该元素的值,当数组为空时返回undefined,此方法更改数组的长度。

var arr = [1, 2, 3, 4, 5];
console.log(arr.pop()); // 5
console.log(arr); // [1, 2, 3, 4] // 改变原数组

Array.prototype.push()

arr.push(element1[, ..., elementN])
elementN 被添加到数组末尾的元素。
push()方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。

var arr = ['a', 'b', 'c', 'd', 'e'];
console.log(arr.push('f','g')); // 7
console.log(arr); // ["a", "b", "c", "d", "e", "f", "g"] // 改变原数组

Array.prototype.reduce()

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
callback 执行数组中每个值 (如果没有提供 initialValue则第一个值除外)的函数,该函数接收二至四个参数。
accumulator 累计器累计回调的返回值,它是上一次调用回调时返回的累积值,或initialValue
currentValue 数组中正在处理的元素。
index 可选 数组中正在处理的当前元素的索引,如果提供了initialValue,则起始索引号为0,否则从索引1起始。
array 可选 调用reduce()的数组。
initialValue 可选 作为第一次调用callback函数时的第一个参数的值。如果没有提供初始值,则将使用数组中的第一个元素,在没有初始值的空数组上调用reduce将报错。
reduce()方法对数组中的每个元素执行一个由指定的reducer函数(升序执行),将其结果汇总为单个返回值。

var arr = [1, 2, 3, 4, 5];
console.log(arr.reduce((accumulator,currentValue) => accumulator+currentValue , 5)); // 20 // 5 + 1 + 2 + 3 + 4 + 5
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.reduceRight()

arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])
callback 执行数组中每个值的函数,该函数接收二至四个参数。
accumulator 累计器累计回调的返回值,它是上一次调用回调时返回的累积值,或initialValue
currentValue 数组中正在处理的元素。
index 可选 数组中正在处理的当前元素的索引,如果提供了initialValue,则起始索引号为0,否则从索引1起始。
array 可选 调用reduce()的数组。
initialValue 可选 首次调用callback函数时,累加器accumulator的值。如果未提供该初始值,则将使用数组中的最后一个元素,并跳过该元素。如果不给出初始值,则需保证数组不为空,在没有初始值的空数组上调用reduce将报错。
reduceRight()方法接受一个函数作为累加器accumulator和数组从右到左的每个值将其减少为单个值。

var arr = [1, 2, 3, 4, 5];
console.log(arr.reduceRight((accumulator,currentValue) => accumulator+currentValue , 5)); // 20 // 5 + 5 + 4 + 3 + 2 + 1
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.reverse()

arr.reverse()
reverse()方法将数组中元素的位置颠倒,并返回该数组,该方法会改变原数组。

var arr = [1, 2, 3, 4, 5];
console.log(arr.reverse()); // [5, 4, 3, 2, 1]
console.log(arr); // [5, 4, 3, 2, 1] // 改变原数组

Array.prototype.shift()

arr.shift()
shift()方法从数组中删除第一个元素,并返回该元素的值,该方法会改变原数组。

var arr = [1, 2, 3, 4, 5];
console.log(arr.shift()); // 1
console.log(arr); // [2, 3, 4, 5] // 改变原数组

Array.prototype.slice()

arr.slice([begin[, end]])
begin 可选 提取起始处的索引,从该索引开始提取原数组元素。如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取,如果省略begin,则slice从索引0开始。如果begin大于原数组的长度,则会返回空数组。
end 可选 提取终止处的索引,在该索引处结束提取原数组元素。slice会提取原数组中索引从beginend的所有元素,包含begin,但不包含end。如果end被省略,则slice会一直提取到原数组末尾。如果end大于数组的长度,slice也会一直提取到原数组末尾。
slice()方法返回一个新的数组对象,这一对象是一个由beginend决定的原数组的浅拷贝,包括begin,不包括end,原始数组不会被改变。

var arr = [1, 2, 3, 4, 5];
console.log(arr.slice(1, -2)); // [2, 3]
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.some()

arr.some(callback(currentValue [, index [, array]])[, thisArg])
callback 为数组中每个元素执行的函数,该函数接收一至三个参数。
currentValue 数组中正在处理的当前元素。
index 可选 数组中正在处理的当前元素的索引。
array 可选 正在操作的数组。
thisArg 可选 当执行回调函数callback时,用作this的值,注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this值。
some()方法测试数组中是不是至少有1个元素通过了被提供的函数测试,它返回的是一个Boolean类型的值。

var arr = [1, 2, 3, 4, 5];
console.log(arr.some( currentValue => currentValue > 1)) // true
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype.sort()

arr.sort([compareFunction])
compareFunction 可选 用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
firstEl 第一个用于比较的元素。
secondEl 第二个用于比较的元素。
sort()方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的。

var arr = [1, 2, 3, 4, 5];
console.log(arr.sort( (a,b) =>  b - a)) // [5, 4, 3, 2, 1]
console.log(arr); // [5, 4, 3, 2, 1] // 改变原数组

Array.prototype.splice()

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
start 指定修改的开始位置,如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素并且等价于array.length-n);如果负数的绝对值大于数组的长度,则表示开始位置为第0位。
deleteCount 可选 整数,表示要移除的数组元素的个数。如果deleteCount大于start之后的元素的总数,则从start后面的元素都将被删除(含第start位)。如果deleteCount 被省略了,或者它的值大于等于array.length - start(也就是说,如果它大于或者等于start之后的所有元素的数量),那么start之后数组的所有元素都会被删除。
item1, item2, ... 可选 要添加进数组的元素,从start位置开始。如果不指定,则 splice()将只删除数组元素。
splice()方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。

var arr = [1, 2, 3, 4, 5];
console.log(arr.splice(1, 1)); // [2]
console.log(arr); // [1, 3, 4, 5] // 改变原数组

Array.prototype.toLocaleString()

arr.toLocaleString([locales[,options]])
locales 可选 带有BCP 47语言标记的字符串或字符串数组。
options 一个可配置属性的对象。
toLocaleString()返回一个字符串表示数组中的元素。数组中的元素将使用各自的 toLocaleString方法转成字符串,这些字符串将使用一个特定语言环境的字符串隔开。

var arr = [1, 'a', new Date('21 Dec 1997 14:12:00 UTC')];
console.log(arr.toLocaleString('en', {timeZone: "UTC"})); // 1,a,12/21/1997, 2:12:00 PM
console.log(arr); // [1, "a", Sun Dec 21 1997 22:12:00 GMT+0800 (中国标准时间)] // 不改变原数组

Array.prototype.toString()

arr.toString()
toString()返回一个字符串,表示指定的数组及其元素。

var arr = [1, 'a', new Date('21 Dec 1997 14:12:00 UTC')];
console.log(arr.toString()); // 1,a,Sun Dec 21 1997 22:12:00 GMT+0800 (中国标准时间)
console.log(arr); // [1, "a", Sun Dec 21 1997 22:12:00 GMT+0800 (中国标准时间)] // 不改变原数组

Array.prototype.unshift()

arr.unshift(element1[, ..., elementN])
elementN 要添加到数组开头的元素或多个元素。
unshift()方法将一个或多个元素添加到数组的开头,并返回该数组的新长度,该方法修改原有数组。

var arr = [1, 2, 3, 4, 5];
console.log(arr.unshift(-1, 0)); // 7
console.log(arr); // [-1, 0, 1, 2, 3, 4, 5] // 改变原数组

Array.prototype.values()

arr.values()
values()方法返回一个新的Array Iterator对象,该对象包含数组每个索引的值。

var arr = [1, 2, 3, 4, 5];
console.log(arr.values().next().value); // 1
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array.prototype[@@iterator]()

arr[Symbol.iterator]()
@@iterator属性和Array.prototype.values()属性的初始值是同一个函数对象,默认情况下与values()返回值相同,arr[Symbol.iterator]则会返回values()函数。

var arr = [1, 2, 3, 4, 5];
console.log(...arr[Symbol.iterator]()); // 1 2 3 4 5
console.log(arr); // [1, 2, 3, 4, 5] // 不改变原数组

Array[@@species]

Array[Symbol.species]
Array[@@species]访问器属性返回Array的构造函数。

console.log(Array[Symbol.species] === Array); //true

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

Js中Array对象相关推荐

  1. js中Array对象。concat,concat,pop,push,reserve,shift,slice,splice,toString,toLocaleString,unshift

    Array对象(arr代码中表示Array创建的实例对象) 创建方式: 1.new Array(); 2.new Array(size);3.new Array(eg01,eg2.eg3.....); ...

  2. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比

    JS中集合对象(Array.Map.Set)及类数组对象的使用与对比 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java ...

  3. Js中Reflect对象

    Js中Reflect对象 Reflect是ES6起JavaScript内置的对象,提供拦截JavaScript操作的方法,这些方法与Proxy对象的handlers中的方法基本相同. 描述 Refle ...

  4. Js中Symbol对象

    Js中Symbol对象 ES6引入了一种新的基本数据类型Symbol,表示独一无二的值,最大的用法是用来定义对象的唯一属性名,Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方 ...

  5. Js中Number对象

    Js中Number对象 JavaScript的Number对象是经过封装从而能够处理数字值的对象,Number对象由Number()构造器以及字面量声明的值在转化为包装对象时创建,JavaScript ...

  6. Js中String对象

    Js中String对象 String全局对象是一个用于字符串或一个字符序列的构造函数. 描述 创建一个字符串可以通过字面量的方式,通过字面量创建的字符串变量在调用方法的时候能够自动转化为临时的包装对象 ...

  7. Js中RegExp对象

    Js中RegExp对象 RegExp对象表示正则表达式,是由普通字符和特殊字符也叫元字符或限定符组成的文字模板,用于对字符串执行模式匹配. 描述 创建一个RegExp对象通常有两种方式,一种是通过字面 ...

  8. js实现小时钟,js中Date对象的使用?

    介绍一下js中Date对象的使用 dateObj = new Date() dateObj = new Date(dateValue) dateObj = new Date(year,month,da ...

  9. php 遍历对象数组,js中遍历对象(5种)和遍历数组(6种)的方法总结

    本篇文章给大家带来的内容是关于js中遍历对象(5种)和遍历数组(6种)的方法总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.遍历对象方法 1.for...in 遍历输出的是对 ...

最新文章

  1. 微信公众号支付(二):统一下单
  2. 解决tomcat中文传输乱码问题
  3. Memcached内存存储
  4. 第四章、项目整合管理【PMP】
  5. java 不兼容类型_java – 不兼容的类型和新鲜的类型变量
  6. Mybatis中的延迟加载的使用方法
  7. pytorch学习笔记(二十六):NIN
  8. java socket5源码_Java利用TCP协议实现客户端与服务器通信【附通信源码】
  9. JavaScript的排序算法
  10. Python动态页面抓取超级指南
  11. Matlab笔记之符号运算中的矩阵转置
  12. 逻辑覆盖:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖
  13. 末学者笔记--MariaDB 数据库 三玄
  14. 系统命令联网激活方法
  15. WIFI智能插座Homekit
  16. 免费思维导图软件,收藏
  17. c#启动时窗口默认光标聚焦位置设置
  18. 在线测试php代码,Php代码 - 在线打字测试(dazi.kukuw.com)
  19. 【OpenCV+Qt】实现简易视频播放器——支持进度条拖动
  20. 安卓设置热点ssid和密码

热门文章

  1. 联想计算机BIOS启动顺序boot,如何进入BIOS并更改启动顺序?
  2. MongoDB中的GridFs是什么
  3. 物流×科技,易流如何用IoT技术加速物流业数字化升级?...
  4. Kotlin - 100%兼容java和android开发
  5. HTML5 小动画例子
  6. 最快配置本地Yum仓库
  7. Python vs PHP vs Ruby —— 编程语言大对决
  8. 学习《HTML+CSS基础课程》里的权值
  9. CentOS6.5下安装iRedMail中需要解决的问题
  10. Centos 6.5 linux 安装nginx