Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

JS 教程

JS 主页 JS 简介 JS 应用场景 JS 输出 JS 语句 JS 语法 JS 注释 JS 变量 JS Let JS Const JS 运算符 JS 算术运算 JS 赋值 JS 数据类型 JS 函数 JS 对象 JS 对象属性 JS 对象方法 JS 对象显示 JS 对象构造函数 JS 事件 JS 字符串 JS 字符串方法 JS 字符串搜索 JS 字符串模板 JS 数字 JS BigInt JS 数字方法 JS 数字属性 JS 数组 JS 数组方法 JS 数组搜索 JS 数组排序 JS 数组迭代 JS 数组 Const JS 日期 JS 日期格式 JS 日期获取方法 JS 日期设置方法 JS 数学 JS 随机数 JS 布尔值 JS 比较 JS If Else JS Switch JS For 循环 JS For In 循环 JS For Of 循环 JS While 循环 JS Break JS 可迭代对象 JS 集合 JS 集合方法 JS 映射 JS 映射方法 JS Typeof JS 类型转换 JS 解构 JS 位运算 JS 正则表达式 JS 运算符优先级 JS 错误 JS 作用域 JS 提升 JS 严格模式 JS this 关键字 JS 箭头函数 JS 类 JS 模块 JS JSON JS 调试 JS 风格指南 JS 最佳实践 JS 错误 JS 性能 JS 保留字

JS 版本

JS 版本 JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS 2019 JS 2020 JS 2021 JS 2022 JS 2023 JS 2024 JS IE / Edge JS 历史

JS 对象

对象定义 对象原型 对象方法 对象属性 对象获取/设置 对象保护

JS 函数

函数定义 函数参数 函数调用 函数调用 函数 Apply 函数 Bind 函数闭包

JS 类

类简介 类继承 类静态

JS 异步

JS 回调函数 JS 异步 JS Promise JS Async/Await

JS HTML DOM

DOM 简介 DOM 方法 DOM 文档 DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS 浏览器 BOM

JS 窗口 JS 屏幕 JS 位置 JS 历史记录 JS 导航器 JS 弹出警报 JS 定时 JS Cookie

JS Web API

Web API 简介 Web 表单 API Web 历史记录 API Web 存储 API Web Worker API Web Fetch API Web 地理位置 API

JS AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用 AJAX 示例

JS JSON

JSON 简介 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON 字符串化 JSON 对象 JSON 数组 JSON 服务器 JSON PHP JSON HTML JSON JSONP

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS 图形

JS 图形 JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

JS 示例

JS 示例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS 浏览器 JS 编辑器 JS 练习 JS 问答 JS 网站 JS 面试准备 JS 集训营 JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象


JavaScript 数组

数组是一种特殊的变量,可以存储多个值。

const cars = ["Saab", "Volvo", "BMW"];
自己尝试 »

为什么要使用数组?

如果你有一组项目(例如,汽车名称列表),将汽车存储在单个变量中可能看起来像这样:

let car1 = "Saab";
let car2 = "Volvo";
let car3 = "BMW";

但是,如果你想循环遍历这些汽车并找到一个特定的汽车呢? 如果你不是 3 辆汽车,而是 300 辆呢?

解决方案是数组!

数组可以在一个名称下存储多个值,你可以通过引用索引号访问这些值。


创建数组

使用数组字面量是创建 JavaScript 数组的最简单方法。

语法

const array_name = [item1, item2, ...];      

建议使用 const 关键字声明数组。

在章节中了解更多关于 const 与数组的知识: JS 数组 Const.

示例

const cars = ["Saab", "Volvo", "BMW"];
自己尝试 »

空格和换行符并不重要。声明可以跨越多行。

示例

const cars = [
  "Saab",
  "Volvo",
  "BMW"
];
自己尝试 »

你也可以先创建一个数组,然后提供元素。

示例

const cars = [];
cars[0]= "Saab";
cars[1]= "Volvo";
cars[2]= "BMW";
自己尝试 »

使用 JavaScript 关键字 new

以下示例也创建了一个数组,并为它分配了值。

示例

const cars = new Array("Saab", "Volvo", "BMW");
自己尝试 »

上面两个示例完全相同。

无需使用 new Array()

为简化、可读性和执行速度,请使用数组字面量方法。



访问数组元素

您可以通过引用索引号来访问数组元素

const cars = ["Saab", "Volvo", "BMW"];
let car = cars[0];
自己尝试 »

注意:数组索引从 0 开始。

[0] 是第一个元素。[1] 是第二个元素。


更改数组元素

此语句更改了 cars 中第一个元素的值

cars[0] = "Opel";

示例

const cars = ["Saab", "Volvo", "BMW"];
cars[0] = "Opel";
自己尝试 »

将数组转换为字符串

JavaScript 方法 toString() 将数组转换为(逗号分隔的)数组值的字符串。

示例

const fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.toString();

结果

Banana,Orange,Apple,Mango
自己尝试 »

访问整个数组

在 JavaScript 中,可以通过引用数组名称来访问整个数组

示例

const cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars;
自己尝试 »

数组是对象

数组是一种特殊的对象。JavaScript 中的 typeof 运算符对数组返回 "object"。

但是,JavaScript 数组最好描述为数组。

数组使用数字来访问其 "元素"。在此示例中,person[0] 返回 John

数组

const person = ["John", "Doe", 46];
自己尝试 »

对象使用名称来访问其 "成员"。在此示例中,person.firstName 返回 John

对象

const person = {firstName:"John", lastName:"Doe", age:46};
自己尝试 »

数组元素可以是对象

JavaScript 变量可以是对象。数组是特殊类型的对象。

因此,您可以在同一个数组中包含不同类型的变量。

您可以在数组中包含对象。您可以在数组中包含函数。您可以在数组中包含数组

myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;

数组属性和方法

JavaScript 数组的真正优势在于其内置的数组属性和方法

cars.length   // 返回元素数量
cars.sort()   // 对数组进行排序

数组方法将在后面的章节中介绍。


length 属性

数组的 length 属性返回数组的长度(数组元素数量)。

示例

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let length = fruits.length;
自己尝试 »

length 属性始终比最高数组索引多 1。


访问第一个数组元素

示例

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[0];
自己尝试 »

访问最后一个数组元素

示例

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[fruits.length - 1];
自己尝试 »

循环遍历数组元素

循环遍历数组的一种方法是使用 for 循环

示例

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fLen = fruits.length;

let text = "<ul>";
for (let i = 0; i < fLen; i++) {
  text += "<li>" + fruits[i] + "</li>";
}
text += "</ul>";
自己尝试 »

您还可以使用 Array.forEach() 函数

示例

const fruits = ["Banana", "Orange", "Apple", "Mango"];

let text = "<ul>";
fruits.forEach(myFunction);
text += "</ul>";

function myFunction(value) {
  text += "<li>" + value + "</li>";
}
自己尝试 »

添加数组元素

向数组添加新元素最简单的方法是使用 push() 方法

示例

const fruits = ["Banana", "Orange", "Apple"];
fruits.push("Lemon");  // 向 fruits 添加新元素(Lemon)
自己尝试 »

也可以使用 length 属性将新元素添加到数组中

示例

const fruits = ["Banana", "Orange", "Apple"];
fruits[fruits.length] = "Lemon";  // 向 fruits 添加 "Lemon"
自己尝试 »

警告!

使用高索引添加元素可能会在数组中创建未定义的 "空洞"

示例

const fruits = ["Banana", "Orange", "Apple"];
fruits[6] = "Lemon";  // 在 fruits 中创建未定义的 "空洞"
自己尝试 »

关联数组

许多编程语言支持具有命名索引的数组。

具有命名索引的数组称为关联数组(或哈希)。

JavaScript不支持具有命名索引的数组。

在 JavaScript 中,数组始终使用编号索引。  

示例

const person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
person.length;    // 将返回 3
person[0];        // 将返回 "John"
自己尝试 »

警告!!
如果使用命名索引,JavaScript 将重新定义数组为对象。

之后,某些数组方法和属性将产生不正确的结果

 示例

const person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
person.length;     // 将返回 0
person[0];         // 将返回 undefined
自己尝试 »

数组和对象的区别

在 JavaScript 中,数组使用编号索引。  

在 JavaScript 中,对象使用命名索引

数组是特殊类型的对象,具有编号索引。


何时使用数组。何时使用对象。

  • JavaScript 不支持关联数组。
  • 当您希望元素名称为字符串(文本)时,应使用对象
  • 当您希望元素名称为数字时,应使用数组

JavaScript new Array()

JavaScript 具有内置的数组构造函数 new Array()

但是您可以安全地使用 [] 代替。

这两个不同的语句都创建了一个名为 points 的新空数组

const points = new Array();
const points = [];

这两个不同的语句都创建了一个包含 6 个数字的新数组

const points = new Array(40, 100, 1, 5, 25, 10);
const points = [40, 100, 1, 5, 25, 10];
自己尝试 »

new 关键字可能会产生一些意外的结果

// 创建一个包含三个元素的数组
const points = new Array(40, 100, 1);
自己尝试 »
// 创建一个包含两个元素的数组
const points = new Array(40, 100);
自己尝试 »
// 创建一个包含一个元素的数组???
const points = new Array(40);  
自己尝试 »

常见错误

const points = [40];

与以下语句不同

const points = new Array(40);
// 创建一个包含一个元素的数组
const points = [40];
自己尝试 »
// 创建一个包含 40 个未定义元素的数组
const points = new Array(40);  
自己尝试 »

如何识别数组

一个常见问题是:如何知道一个变量是否为数组?

问题在于 JavaScript 运算符 typeof 返回 "object"

const fruits = ["Banana", "Orange", "Apple"];
let type = typeof fruits;
自己尝试 »

typeof 运算符返回 object,因为 JavaScript 数组是对象。

解决方案 1

为了解决这个问题,ECMAScript 5(JavaScript 2009)定义了一个新的方法 Array.isArray()

Array.isArray(fruits);
自己尝试 »

解决方案 2

instanceof 运算符如果对象是由给定构造函数创建的,则返回 true

const fruits = ["Banana", "Orange", "Apple"];

(fruits instanceof Array);
自己尝试 »

嵌套数组和对象

对象中的值可以是数组,数组中的值可以是对象

示例

const myObj = {
  name: "John",
  age: 30,
  cars: [
    {name:"Ford", models:["Fiesta", "Focus", "Mustang"]},
    {name:"BMW", models:["320", "X3", "X5"]},
    {name:"Fiat", models:["500", "Panda"]}
  ]
}

要访问数组内部的数组,请对每个数组使用 for-in 循环

示例

for (let i in myObj.cars) {
  x += "<h1>" + myObj.cars[i].name + "</h1>";
  for (let j in myObj.cars[i].models) {
    x += myObj.cars[i].models[j];
  }
}
自己尝试 »

完整的数组参考

有关完整的数组参考,请访问我们的

完整的 JavaScript 数组参考.

参考包含所有数组属性和方法的描述和示例。

通过练习来测试自己

练习

cars 数组中获取值 "Volvo"。

const cars = ["Saab", "Volvo", "BMW"];
let x = ;

开始练习

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.