Day-05 JavaScript阵列

阵列可以一次宣告大量的变数,有节省时间、空间的优点。在JavaScript里,阵列可储存不同型态的值(包括物件、函式、原始资料类型、其他阵列等),相当方便。

然而,因为JavaScript每个元素的位元长度都不同,执行效能也较低。相较之下,一些只能储存同型态值的语言(如C语言),虽较不便,但其各元素位元长度都一样,效能相对较高。

建立与存取

值得注意的是,阵列有其顺序性,存取必须透过 [ ] 加上索引值。而索引是从0开始计算的,换言之,以下面为例,想取得第一个城市的内容,就要用 city[0] 来取得。

阵列的建立与物件相同,同样有两种作法可用。

传统作法(以new建立):

let city = new Array();

city[0] = “Taipei”
city[1] = “Taichung”
city[2] = “Kaohsiung”

实务作法1:阵列实字(array literal)

let city = [];

city[0] = “Taipei”
city[1] = “Taichung”
city[2] = “Kaohsiung”

实务作法2

let city = [“Taipei”, “Taichung”, “Kaohsiung”];

在前例中,若我们用length属性取得阵列内容长度,会发现都是3(因为都塞入了3个内容)。

city.length; //印出3

视实际用途,阵列的长度可以透过指定,随时增减。以前例为例,我们可以跳号指定第9个城市。
被跳过的阵列索引,因为没指定值给它(们),自然就是 undefined了。

//前段略
city[8] = “Keelung”;

//接着印出阵列全部内容
console.log(city); //会印出 [“Taipei”, “Taichung”, “Kaohsiung”, undefined, undefined, undefined, undefined, undefined, “Keelung”]

内容增减

在前前例中,若想在「阵列末端」追加一个城市,可以运用push()方法:

let city = [“Taipei”, “Taichung”, “Kaohsiung”];

city.push(“Tainan”);
console.log(city); //会印出[“Taipei”, “Taichung”, “Kaohsiung”, “Tainan”]

同在此例,若想直接以「新北市」代换「台北市」的名称(原地变更阵列中的值),可以用以 = 指定之:

let city = [“Taipei”, “Taichung”, “Kaohsiung”];

city[0] = “New Taipei”
console.log(city); //会印出[“New Taipei”, “Taichung”, “Kaohsiung”]

此外,尚有可在阵列中间插入元素的splice() 方法、删除头/尾的pop() 方法与shift() 方法等。
详情可参阅MDN手册如下:
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/pop
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/shift

型别判断

在JavaScript,若要检查一个值的型别,可以用typeof运算子。前文我们已曾运用一次。然而,若我们直接以typeof去检查阵列,由於历史遗留问题,回传的会是物件(object),而非阵列。如:

typeof []; // 回传“object”

为了判断一个值/变数究竟是物件?还是阵列?现行的JavaScript已有解方。我们可运用isArray() 方法解决此问题。

city.isArray([]); // true 是阵列
city.isArray([“Taipei”]);  // true 是阵列
city.isArray();  // false 不是阵列
city.isArray(null);  // false 不是阵列

<<:  【第二十天 - Graph 介绍】

>>:  Day 05 GPIO peripherals

全端入门Day06_何谓全端之後端前篇

昨天介绍了後端,可能都是字,今天就来放我自己做的图片: 我相信看过就会更了解我昨天说的了,今天的主题...

Day 24 尽情的自我发挥吧!

2021/10/5是我在铁人赛发文到达200篇的日子,这四年多来,不知不觉的就这样累积了200篇的文...

Day 30 - Occurrences After Bigram

大家好,我是毛毛。ヾ(´∀ ˋ)ノ 来到30天的最後一天解题Day啦~ 1078. Occurren...

电子书阅读器上的浏览器 [Day05] 提高图案对比度

从下面截图可以看得出来,原本的画面设计大部分按钮图案是灰色的,有些地方的文字也是非全黑的颜色。这在一...

简单的 HelloWorld ~

今天本来要照着顺序来聊聊开发环境介绍的,但太枯燥了先跳过吧XD 想说点简单的,顺便为下一篇内容提出几...