JS数组
JS数组用于在单一变量中存储多个值
创建数组
1.使用数组文本是创建JS数组最简单的方法
语法:
var array-name = [item1, item2, ...];
eg:
var cars = ["Saab", "Volvo", "BMW"];
//空格和折行并不重要。声明可横跨多行:
var cars = [
"Saab",
"Volvo",
"BMW"
];
请不要在最后一个元素之后写逗号(比如“BMW”,)。可能会存在跨浏览器兼容性问题
2. 使用JS关键词new
下面的例子也会创建数组,并且赋值:
var cars=new Array("Ass","ass")
出于简洁、可读性和执行速度的考虑,请使用第一种方法(数组文本方法)。
访问数组元素
我们通过引用索引号(下标号)来引用某个数组元素。
访问cars首个元素的值:
var name = cars[0];
修改数组元素:
修改cars首个元素
cars[0] = "Opel";
访问完整数组
通过JS,可以通过引用数组名来访问完整数组
var cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars;
数组是对象
数组是一种特殊类型的对象
在JS中对数组使用typeOf运算符会返回“object”
数组元素可以是对象:
JavaScript 变量可以是对象。数组是特殊类型的对象。
正因如此,您可以在相同数组中存放不同类型的变量。
您可以在数组保存对象。您可以在数组中保存函数。你甚至可以在数组中保存数组:
myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;
数组属性和方法:
JS数组的真实力量隐藏在数组的属性和方法中:
var x=cars.length; //length属性返回元素的数量
var y=cars.sort(); //sort()方法对数组进行排序
length属性:
length属性返回数组的长度(数组元素的数目)
var cars=["a","b"];
cars.length; //cars长度是2
访问数组最后一个元素
var last=cars[cars.length-1]
遍历数组元素
- 遍历数组元素使用的是for循环
var cars,text,Len,i;
cars=["A","B","C"];
Len=cars.length;
text="<ul>"
for(i=0;i<Len;i++){
text+="<li>"+cars[i]+"</li>";
}
text+="</ul>";
- 也可以使用Array.forEach()函数
var cars,text;
cars=["A","B","C"];
text="<ul>";
cars.forEach(myFunction);
text+="</ul>";
function myFunction(value){
text+="<li>"+value+"</li>";
}
添加数组元素
向数组添加新元素的最佳方法是使用push()方法
- 使用push()方法:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Lemon"); // 向 fruits 添加一个新元素 (Lemon)
- 使用length属性向数组添加新的元素
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[fruits.length] = "Lemon"; // 向 fruits 添加一个新元素 (Lemon)
**alert:**添加最高索引的元素可以在数组总创建未定义的“洞”;
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[6] = "Lemon"; // 向 fruits 添加一个新元素 (Lemon)
注意:fruits[4]和fruits[5]为undefined;
关联数组
很多编程元素支持命名索引的数组。
具有命名索引的数组被称为关联数组(或散列)。
JavaScript 不支持命名索引的数组。
在 JavaScript 中,数组只能使用数字索引。
数组和对象的区别:
- 在JS中,数组用数字索引
- 在JS中,对象用命名索引
- 数组是特殊类型的对象,具有数字索引
何时使用数组?何时使用对象?
- JS不支持关联数组
- 若希望元素名是字符串(文本)则应该使用对象
- 如希望元素名是数字,则应该使用数组
不要使用new()创建数组
- 会使代码复杂化,也会产生不可预计的后果
eg:
var cars=new Array(40)
//不是创建40元素的数组,而是创建了含有40个未定义(undefined)元素的数组
如何识别数组?
问题:JS的typeof运算符返回的数组类型为"object“
- 解决方案
ECMAAcript定义网络新的方法Array.isArray():
cars=["A"."B","C"];
Array.isArray(cars);
**注释:**此方案的问题在于ECMAScript不支持老的浏览器
- 解决方案
创建自己的isArray() 函数以解决此问题:
function isArray(x){
return x.constructor.toString().indexof("Array") > -1
}
若参数是数组,则上面的函数始终返回true;
假如对象原型包含单词“Array”则返回true
- 解决方案
假设对象是由给定的构造器创建,则instanceof 运算符返回true:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits instanceof Array // 返回 true
JS数组方法:
将数组转换成字符串:
- JS方法toString() 把数组转换为数组值(逗号分隔)的字符串:
eg:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.toString();
//输出Banana,Orange,Apple,Mango
- join() 方法也可以将数组元素结合成为一个字符串。
行为类似于toSring(),但是join()还可以规定分隔符;
var fruits = ["Banana", "Orange","Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits