js数组
js的数组不是典型的数组
典型的数组
元素的数据类型相同
使用连续的内存储存
通过数字下标获取元素
但是js的数组不这样
元素的数据类型可以不同
内存不一定连续的(对象是随机储存的)
不可以通过数字下标,而是通过字符串下标
这意味着数组可以有任何的key
比如:
let arr = [1,2,3]
let['xxx'] =1
对比不同:
典型的数组:连续存储的
但是js的数组:
//创建一个数组:
let arr = [1,2,3]
let arr = new Array(1,2,3)
let arr = new Array(3)//长度
//转化数组
let str = '1,2,3'
undefined
str.split(',')
(3) ["1", "2", "3"]
let str = '123'.split('')
undefined
str
(3) ["1", "2", "3"]
Array.from({0:'1',1:'b',length:4})
(4) ["1", "b", undefined, undefined]
图片来自于:
写代码啦!xiedaimala.com伪数组(偷偷转化为数组)
伪数组的原型链中并没有数组的原型,没有数组共用属性的数组就是伪数组
什么是伪数组?
- 拥有 length 属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
- 不具有数组所具有的方法
let divList = document.querySelector('div')
伪数组的原型链中并没有数组的原型原理:
array = [1,2,3,4,5](5) [1, 2, 3, 4, 5]array.__proto__ === Array.prototype
true
array(5) [1, 2, 3, 4, 5]
0: 1
1: 2
2: 3
3: 4
4: 5
length: 5
__proto__: Array(0)//第一层原型
concat: ƒ concat()
constructor: ƒ Array()
copyWithin: ƒ copyWithin()
entries: ƒ entries()
every: ƒ every()
fill: ƒ fill()
filter: ƒ filter()
find: ƒ find()
findIndex: ƒ findIndex()
flat: ƒ flat()
flatMap: ƒ flatMap()
forEach: ƒ forEach()
includes: ƒ includes()
indexOf: ƒ indexOf()
join: ƒ join()
keys: ƒ keys()
lastIndexOf: ƒ lastIndexOf()
length: 0
map: ƒ map()
pop: ƒ pop()
push: ƒ push()
reduce: ƒ reduce()
reduceRight: ƒ reduceRight()
reverse: ƒ reverse()
shift: ƒ shift()
slice: ƒ slice()
some: ƒ some()
sort: ƒ sort()
splice: ƒ splice()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
unshift: ƒ unshift()
values: ƒ values()
Symbol(Symbol.iterator): ƒ values()
Symbol(Symbol.unscopables): {copyWithin: true, entries: true, fill: true, find: true, findIndex: true, …}
__proto__: //第二层原型
constructor: ƒ Object()
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()
array = {0:'a',1:'b',2:'c',length:3}
{0: "a", 1: "b", 2: "c", length: 3}
0: "a"
1: "b"
2: "c"
length: 3
__proto__:
constructor: ƒ Object()
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()
详细内容:
JavaScript中的伪数组和数组_jhkkk的博客-CSDN博客_伪数组blog.csdn.netcontact:连接两个数组,但是不改变两个数组
let arr3 = [3,3,3]
undefined
let arr4 = [4,4,4]
undefined
arr3.concat(arr4)
(6) [3, 3, 3, 4, 4, 4]
arr3
(3) [3, 3, 3]
arr4
(3) [4, 4, 4]
slice:切分两个数组但是不改变这两个数组
想要复制的方法就用
arr.slice(0)//注意,js只提供浅拷贝
let arr5 = [1,2,3,4,5,6,7,8,9]
undefined
arr5.slice(2)
(7) [3, 4, 5, 6, 7, 8, 9]
arr5
(9) [1, 2, 3, 4, 5, 6, 7, 8, 9]