let arr = new Array()
arr['abc'] = 123
arr[0] // undefined
arr['abc'] // 123
JavaScript中一切皆对象,数组也是对象。
创建Array对象
- new Array()
- new Array(size)
- new Array(element0, element1, …, elementn)
var array1 = new Array()
//array1 []
var array2 = new Array(5)
//array2 (5)[empty * 5]
var array3 = new Array(1,2,3)
//array3 (3) [1, 2, 3]
Array对象属性
- constructor (object.constructor)
- length
- prototype
constructor和prototype是对象都有的
constructor属性返回的是创建此对象的数值函数的引用
prototype 属性使您有能力向对象添加属性和方法。
//constructor demo1 判断对象类型
var test = new Array()
test.constructor == Array
// true
//constructor demo2 明确是那一段
function employee(name,job,born){
this.name = naem;
this.job = job;
this.born = born;
}
var bill = new employee("wayliu","student","1999");
document.write(bill.constructor)
//function employee(name, job, born)
//{this.name = name; this.job = job; this.born = born;}
employee.prototype.salary = null
bill.salary = 20000
console.log(bill.salary)
// 20000
Array 对象方法
下面用到arr都是这个
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
</script>
1.concat()
concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
arrayObject.concat(arrayX,arrayX,…,arrayX)
//concat demo1:连接参数
var a = [1,2,3]
var b = a.concat(4,5)
console.log(a) // (3) [1, 2, 3]
console.log(b) // (5) [1, 2, 3, 4, 5]
//concat demo2 连接一个数组
arr.concat(arr2)
//concat demo3 连接多个数组
arr.concat(arr2,arr3)
可以用es6的数组扩展替代:
var c = [...a,...b]
c //(5) [1, 2, 3, 4, 5]
2.join (与字符串的sprit()方法对应)
数组所有元素放入字符串
console.log(arr.join()) //"George,John,Thomas" //默认为","
console.log(arr.join(".")) //"George.John.Thomas"
3.pop
尾删,并返回此元素
console.log(arr.pop) //Thomas
4.shift
头删,并返回此元素
5.push
尾追,并返回新的长度
console.log(arr.push("wayliu")) //4
6.unshift() 头删
7.reverse() 翻转
console.log(arr.reverse()) //["Thomas", "John", "George"]
8.slice() {arrayObject.slice(start,end)}
纯函数,返回的是一个子函数
console.log(arr.slice(1)) // ["John", "Thomas"]
console.log(arr.slice(1,2)) //["John"]左开右闭
console.log(a) //["George", "John", "Thomas"] 并不会影响arr
9.sort() 排序
arrayObject.sort(sortby)
sortby可选。规定排序顺序。必须是函数。
1.调用该方法时没有使用参数,按照字符编码的顺序进行排序。
2. 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
console.log(arr.sort()) //["1", "10", "1000", "25", "40", "5"]
console.log(arr) //["1", "10", "1000", "25", "40", "5"]
//使用一个排序函数
function sortNumber(a,b)
{
return a - b
}
console.log(arr.sort(sortNumber())) //1,5,10,25,40,1000
10.splice()
为数组添加、删除元素,注意非纯函数
arrayObject.splice(index,howmany,[item1,…,itemX])
index:必须,添加、删除起始
howmany: 必须,删除个数
[item1,…,itemX]:可选,替换删除的
console.log(arr.splice(0,1,'wayliu')) //["George"],返回的是被删的
console.log(arr) //["wayliu", "John", "Thomas"]
//添加
arr.splice(0,0,'wayliu') // []
console.log(arr) //["wayliu", "George", "John", "Thomas"]
11.toString()
转换为字符串并返回结果
console.log(arr.toString()) //"George,John,Thomas"
console.log(arr) //["George", "John", "Thomas"]
//跟那个join()参数为空时表现一致,但是这个不会改变自身
12.toLocalString()
以特定地区的分隔符分隔
arr.toLocaleString() //"George,John,Thomas"
13.valueOf() //后台调用
14.迭代方法:
- every 数组中每一项都返回true才返回true
- some 数组中有一项返回true就返回true
- filter 返回数组中true的项组成的数组
- forEach 每一项运行给的函数
- map 返回每次函数调用的结果组成的数组
var numbers = [1,2,3,4,5,4,3,2,1]
// every
var everyResult = numbers.every(function(item,index,array) {
return item > 2
})
console.log(everyResult) // false
// some
var someResult = numbers.some(function(item, index, array){
return item > 2
})
console.log(someResult) //true
// filter
var filterResult = numbers.filter(function(item, index, array){
return item > 2
})
console.log(filterResult) // [3,4,5,4,3]
// map
var mapResult = numbers.map(function(item, index, array){
return item * 2
})
console.log(mapResult) // [2, 4, 6, 8, 10, 8, 6, 4, 2]
// forEach
numbers.forEach(function(item, index, array) {
// 执行一些操作
})
总结
自己不熟悉的方法
- concat() 连接数组或值
- sort() 排序,有参数时不熟悉
- slice() 从数组返回选定的元素 ,纯函数
- splice() 增删数组,注意三个参数,非纯函数
可以转换为字符串的方法join()、toString()、toLocaleString()