作为一种线性数据结构,几乎每一种编程语言都支持数组类型。和c++、java这些强类型的语言相比,JavaScript数组有些不同,它可以存放任意类型的值。上节中有提到过JS中任意类型的值都可以赋值给任何一个变量,所以从数组中取出不同类型的值时也就不存在类型转换安全问题。

JS数组的使用非常简单,只是有些细节可能容易被忽略,下面是数组的定义:

    <script type="text/javascript">
function func(){
console.log("func function!");
}
var obj = {
name:"Jane",
age:30
}
var arr = [1,func,obj];
alert(typeof arr[1]);//function
alert(arr.length);//3
</script>

数组定义很简单,通过一个中括号[ ]来声明,可以在声明时指定元素值,每个元素用逗号隔开,元素可以是任意类型。上节提到过,数组也属于object类型,我们可以通过它的length属性来获取数组的长度。

JS数组的长度是不固定的,可以在程序中随意增加或减少数组长度。

    <script type="text/javascript">
var arr = [];
arr[0] = 1;
arr[1] = 2;
alert(arr.length);//2
arr[2] = 3;
alert(arr.length);//3
</script>

在c++、java这些强类型的语言中数组的下标只能是整型或者char类型,JS数组并不是这样的,它的下标可以是上节讲到的数据类型中的任何一种,看下面的例子:

    <script type="text/javascript">
function func(){
};
var arr = [];
arr[0] = 1;
arr[1.3] = 3;
alert(arr[1.3]);//3
arr["age"] = 23;
alert(arr["age"]);//23
alert(arr.age);//23
arr[undefined] = "undef";
alert(arr[undefined]);//undef
arr[func] = "func";
alert(arr[func]);//func
alert(arr.length);//1
</script>

有点凌乱了吧,我们可以將一个小数作为数组下标arr[1.3]=3,然后可以通过arr[1.3]获取下标的值。字符串作为下标时稍微特殊一点,我们不仅可以通过arr[“age”]来获取下标对应的值,还可以使用arr.age这种形式。我们甚至可以定义一个函数func,使用函数名作为下标。

最后我们使用arr.length获取数组的长度,发现长度为1,这是怎么回事呢?

我们来通过代码分析一下:

    <script type="text/javascript">
function func(){};
var arr1 = [];
arr1[0] = 1;
arr1[4.3] = 1;
alert(arr1.length);//1 var arr2 = [];
arr2[0] = 1;
arr2[4] = 1;
alert(arr2.length);//5 var arr3 = [];
arr3[0] = 1;
arr3[4] = 1;
arr3["hello"] = "hello";
alert(arr3.length);//5
</script>

可以看到通过length属性获得数组的长度实际上并不准确,它的值是数组的最大整数下标+1。

为了避免数组下标出现不连续的情况,我们通常將数组作为栈来操作,需要增加数组长度并向数组中添加元素时调用push函数,减少数组长度同时移除元素可以调用pop方法。

案例代码如下:

    <script type="text/javascript">
var func = function(){};
var arr = [];
arr.push(func);
arr.push(1);
arr.push(10);
arr.push("hello");
arr.push("world");
for(i=0;i<arr.length;i++)
{
document.writeln(arr[i]);
}
arr.pop();//去除最后一个元素,并返回元素值
document.writeln("<br/>");
for(i=0;i<arr.length;i++)
{
document.writeln(arr[i]);
}
</script>

页面输出:

最新文章

  1. C++自学计划
  2. Eclipse创建maven的Web项目
  3. CBC和CTR解密模式——C++实现
  4. 用ultraISO 制作一个MSdos启动软盘镜像
  5. android studio 0.8.11 如何导入Library(新手向)
  6. paip.输入法编程---词频顺序order by py
  7. Mysql主从复制,读写分离
  8. 使用Echarts的五个步骤
  9. CodeForces 443B Kolya and Tandem Repeat
  10. gdal库的三个使用心得
  11. c语言下多线程
  12. 2017-4-25/设计缓存(LFU)
  13. 用adb命令查看apk版本
  14. 【Jsp/Servlet】获取客户端使用的ip
  15. Mysql 查询缓存总结
  16. 用 zotero 管理文献和个人知识库
  17. 做项目单个功能的时候要理解需求和sql语句。
  18. [微信小程序] 微信小程序下拉滚动选择器picker绑定数据的两种方式
  19. 重新设置Linux的IP地址(该操作会永久更改ip地址)
  20. JQuery - 阻止回车键

热门文章

  1. 匹配替换指定文本为html标签
  2. WPF动态控件生成查找不到问题
  3. ValueProvider核心的值提供系统
  4. Tarjan 求图点强联通,桥的应用
  5. ssh: connect to host port 22: Connection refused
  6. Arduino扫盲(持续添加中)
  7. Unity 需不需要再建Assets文件夹
  8. jsp错误页面的处理
  9. 使用短信猫发送短信java代码
  10. jq点击按钮打开和关闭弹出层,点击除了当前按钮以外的地方关闭弹出层