0

0

资深程序员对JavaScript的数组总结

韦小宝

韦小宝

发布时间:2018-03-02 10:09:43

|

1498人浏览过

|

来源于php中文网

原创

javascript中的数据类型在我们的javascript的日常开发中是必须要用到的,数组就是其中的一种,php中的数组和javascript中的数组几乎是没有差别的,本篇文章我们来看看资深程序员对javascript的数组是如何总结的吧

一、 数组的概念

1.1 什么是数组

数组是指的数据的有序列表。

  1. 数组中每个值称之为数组的一个元素。

    立即学习Java免费学习笔记(深入)”;

  2. 数组中的每个元素都有一个位置,这个位置称之为索引(下标、index)。数组的索引是从 0 开始的

  3. 同一个数组中,元素的类型不做任何限制。也就是说,同一个数组中可以方法Number、String、Boolean、Object对象等等。可以同时放入任何的类型。甚至数组中的元素可以是另外一个数组(构成多维数组)。

1.2 JavaScript中数组的特点

虽然每种语言都有数组这种数据结构,但是JavaScript的数组相比他们有很大不同。

  1. 数组长度可以动态改变。

  2. 同一个数组中可以存储不同的数据类型。

  3. 数据的有序集合

  4. 每个数组都有一个length属性,表示的是数组中元素的个数

二、数组的创建

数组有两种基本创建方式:字面量方式和构造函数

2.1 字面量的方式

数组字面量: 所有的元素用方括号括起来,不同的元素之间用逗号分隔。

//例如:
[“a”, 5, “b”]
//创建一个长度为 3 的数组,并初始化了3 个元素:"abc" "b" "d"
var colors = ["abc", "b", "d"];
//创建一个长度为 0 的空数组数组。里面一个值都没有
var colors = [];
//不要在最后一个元素的后面添加逗号,添加逗号虽然语法没有问题,但是在不同的浏览器可能得到不同的结果
var colors = [5, 6, 7,]; //这样数组的长度可能为 3 也可能为 4。在不同浏览器会得到不同的结果应避免这种创建方式。

2.2 构造函数的方式

构造函数在创建对象的时候使用。数组的构造函数式 Array()

例如:
new Array(数组长度);
//创建一个长度为 0 的空数组
var colors = new Array();
//创建一个长度为 5 的数组。每个数组的元素的默认值是 undefined。
var colors = new Array(5);
//创建一个长度为 3 的数组,并且3个元素分别是 "blue" "red" "green"
var colors = new Array("blue", "red", "green");

注意:

  1. 使用构造函数创建数组对象的时候,最后一个元素后面不要添加括号,否则报错。 这样是错误的:new Array("a", )

  2. 使用构造函数如果只传入了一个Number值,则这个值必须 >= 0, 否则会报错。

  3. 使用构造函数创建数组对象的时候,new 关键字是可以省略的。 例如:Array(5) 这样是可以的。

三、访问和修改数组中的元素

利用索引访问数组中的元素。

如果数组的长度为 5,那么数组的索引为 0,1,2,3,4

//创建一个长度为 5 的数据
var arr = [10, 20, 60, 5, 7];
alert(arr[0]);  //获取下标为 0 的元素,  即:10
alert(arr[2]);  //获取下标为 2 的元素,  即:60
arr[1] = 100;  //把下标为 1 的元素赋值为100。

四、数组的长度

4.1 获取数组的长度

每个数组都有一个叫 length的属性,表示数组的长度(即:元素的个数)。

var arr = [10, 20, 60, 5, 7];
alert(arr.length);  //弹出:5

4.2 修改数组的长度

在一般的强类型语言中,数组的长度是固定的,即:数组一旦创建成功,则不能改变数组的长度。
但是,JavaScript是一种弱类型的动态语言,数组的长度可以在程序运行期间根据需要进行动态的更改
==数组length属性不是只读,而是可以修改的。==

1. 通过设置length的值直接修改数组的长度到指定的数值。

var arr = ["a", 8, "bc"]; //数组的长度为 3 
arr.length = 6; // 修改数组的长度为 6 
alert(arr.length);  //数组的长度已经被修改为了 6 ,所以此处输出6.
// 下标为 3, 4, 5 的元素的值为undefined的。
alert(arr[3]);  //弹出:undefined的。

arr.length = 2; // 修改数组的长度为 2 ,则下标为 >= 的元素被自动从数组移除。

2. 通过给最后一个元素赋值来动态修改元素的长度。

var arr = [4, 6, 8];
// 给下标为 10 的元素赋值为 100.  由于最初长度为 3 ,这个赋值操作完成后,数组的长度会自动增长为11
arr[10] = 100;
alert(arr.length);  // 弹出:11
// 没有赋值的元素默认都为 undefined
alert(arr[5]); //弹出:undefined

alert(arr[20]); //弹出: undefined
alert(arr.length); // 长度仍然为11.  上一行代码仅仅去访问元素,而没有赋值操作,则不会引起数组长度的变化

五、数组的遍历

一般有3种方法遍历数组:

  • for循环

  • for… in

  • for each ( ES5 新增)

5.1 使用普通for循环遍历数组

var arr = [50, 20, 10, 5, 15, 6];       
for(var i = 0; i < arr.length; i++){    //数组长度多长,就遍历多少次。  循环变量作为数组的下标
  console.log(arr[i]);
}1234

5.2 使用 for…in 循环遍历数组

for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性和数组的元素。

示例:

var arr = [50, 20, 10, 5, 15, 6];
// 每循环一轮,都会把数组的下标赋值给变量index,然后num就拿到了每个元素的下标。 
//注意:这里index是元素的下标,不是与元素
//对数组来说,index从从0开始顺序获取下标
for (var index in arr) {
  console.log(num);  //循环输出: 0 1 2 3 4 5
}
//这里var 关键字也是可以省略的,但是不建议省略。
for(i in arr){
  console.log(arr[i]);
}

5.3 使用for …each遍历数组

ES5为每个数组新增了一个方法 array.forEach(function) ,使用这个方法,可以自动帮我们遍历数组中的所有元素

var arr = [50, 20, 10, 5, 15, 6];
//调用数组的forEach方法,传入一个匿名函数
//匿名函数接受两个参数:   参数1--迭代遍历的那个元素  参数2:迭代遍历的那个元素的下标
//可以在匿名函数内部书需要的代码
arr.forEach( function(element, index) {
  alert(element);
});

六、 数组常用方法

6.1 转换方法

toString()转换方法:

  • 返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串

join() 方法:

  • toString() 方法只能使用逗号连接,而 join() 方法可以使用指定的连接符连接

6.2 栈方法

栈:一种数据结构。特点:FILO (先进后出)

向栈中存入元素 称之为 入栈(push)、从栈中移除元素称之为出栈(pop)。先入栈的元素在栈地下,后入栈的元素在栈顶。这两个动作都是对栈顶的元素进行操作。一般栈提供这两个操作足矣。

~ONVJGL]N}5P]$3R_FSPAZI.png

JavaScript中,支持像操作栈一样去操作数组。

DELPHI控件开发深入简出 word文档 doc格式
DELPHI控件开发深入简出 word文档 doc格式

DELPHI控件开发深入简出 有人说过“不会开发控件的Delphi程序员不是真正的程序员”。Delphi正是由于高度的可扩展性和大量的第三方控件的支持才能吸引无数程序员挑剔的目光。即使是由于工作需要使用其他开发工具的开发者也常常怀念和Delphi度过的日日夜夜。接触Delphi已经一年多了,从当初对着Delphi组件面板上上百个控件不知所措,到现在已经可以根据需要开发一些有一定难度的控件,其中走过的路是十分艰辛的,所以特此写下这篇文章,将自己的经验留给后来者,也算是

下载

说明:

  • 入栈其实就是把新的元素添加到数组的后面

  • 出栈其实就是把数组中的最后一个元素从数组中移除

6.2队列方法

队列也是一种数据结构。 特点:FIFO(先进先出)

JavaScript中,对数组的操作也提供了模拟队列的方法。

  1. 向队列头部添加元素(unshift)、从队列头部移除元素(shift)

  2. 向队列尾部添加元素、从队列尾部移除元素

注意:对队列尾部的操作没有提供新的方法,使用push和pop可以完成相应的操作。

6.3 数组中元素的倒置

注意:

==倒置操作是对原数组本身做了操作,返回的也是原数组对象,并不是一个新创建的数组。==

6.4 查找指定元素在数组中的索引

indexOf(item): 从前面开始向后查找 item 第一次出现的位置

lastIndexOf(item): 从尾部开始向前查找 item 第一次出现的位置

  • 如果找不到元素,则返回 -1

indexOf(item, fromBack): 从第二个参数的位置开向后始查找 item 第一次出现的位置

lastIndexOf(item, fromForward): 从第二个参数的位置开始向前查找 item 第一次出现的位置

6.4 获取新的数组

  1. arr.contact(arrayX,arrayX,……,arrayX)

该方法用于连接两个或多个数组。至少传入一个参数,参数可以是数组也可以是元素。

==注意:该方法是返回的一个新的数组,原数组没有做任何改变==

  1. arr.slice(start,end) : 截取数组,并返回截取到的新数组

  • start:必须。从原数组中的start位置开始截取==(包括下标为start的元素)==。 如果是负数表示从尾部开始截取: -1表示最后一个元素

  • end: 可选。截取到指定位置==(不包括下标为end的元素)==。如果没指定,则指的是截取到最后一个元素

  • end要大于start,否则截取不到元素

==注意:该方法是返回的一个新的数组,原数组没有做任何改变==

  1. arr.splice(index,howmany,item1,…..,itemX) 方法向/从数组中添加/删除元素,然后==返回被删除的元素组成的数组。==

  • 必需。整数,规定添加/删除元素的位置,使用负数可从数组结尾处规定位置。

  • 必需。要删除的元素数量。如果设置为 0,则不会删除元素。 如果添加元素这里应该是0

  • 可选。向数组添加的新项目。

==注意:这个方法会对原数组做出修改。==

  • 删除元素

  • 添加元素

七、 数组排序

JavaScript中,所有的数组对象都提供了一个排序函数。

arr.sort(sortby) 方法用于对数组的元素进行排序。

  • sortby 可选。规定排序顺序。必须是函数。

  1. 不传入参数的时候,是默认的升序排列。但是做升序排列的时候,是把每个元素转换成string之后,按照编码表中的顺序排序的。

从上面可以看出来,当数组中的元素是Number的时候,按照编码表排序并不太符合我们的预期,我们更想按照数字的大小排序。这时,我们可以传递一个 “比较函数”。

  • 纯数字的数组,还有一种更简洁的排序函数。

//升序函数
function sortAsc(num1, num2){
    return num1 - num2;   //num1 > num2 就返回正数
}
// 降序函数
function sortDesc(num1, num2){
    return num2 - num1; //num1 > num2 就返回负数
}

八、 数组检测

如何检测一个对象是不是一个Array。

  1. 使用instanceof运算符。

  2. 使用Array.isArray(arr) 方法。

8.1 instanceof运算符

JavaScript中instanceof运算符会返回一个 Boolean 值,指出对象是否是特定构造函数的一个实例。

var arr = [];
alert(arr instanceof Array); //true12

8.2 Array.isArray(arr) 方法

Array.isArray(arr) , 如果arr是数组,则返回true,否则返回false

var arr = [];
alert(Array.isArray(arr));  //true
alert(Array.isArray("abc"));    // false

九、 二维数组

如果数组中的元素存储的是数组,则就构成了二维数组。

//数组中的每个元素都是数组,则就是一个二维数组
var towDimArr = [
                  [4, 5], 
                  [7, 8],
                  [50, 9, 10],
                  [5]
                ];
alert(towDimArr.length); //数组的长度为 4

//使用嵌套循环来遍历二维数组。
for (var i = 0; i < towDimArr.length; i++) {
    for (var j = 0; j < towDimArr[i].length; j++) {
      alert(towDimArr[i][j]);
    }
}

详细的讲述了JavaScript中数组,大家可以详细的阅读一下哦!

相关推荐:

JavaScript数组进化与性能分析实例

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

309

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

463

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

350

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

31

2025.11.30

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

232

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

87

2025.10.17

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

0

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号