ອະນຸຍາດ JavaScript

JavaScript 数组用于在单一变量中存储多个值。

ຕົວຢ່າງ:

var cars = ["Saab", "Volvo", "BMW"];

ທົດລອງເອງ

什么是数组?

数组是一种特殊的变量,它能够一次存放一个以上的值。

如果您有一个项目清单(例如,汽车品牌列表),在单个变量中存储汽车品牌应该是这样的:

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

不过,假如您希望遍历所有汽车并找到一个特定的值?假如不是三个汽车品牌而是三百个呢?

解决方法就是数组!

数组可以用一个单一的名称存放很多值,并且还可以通过引用索引号来访问这些值。

创建数组

使用数组文本是创建 JavaScript 数组最简单的方法。

语法:

var array-name = [item1, item2, ...];

ຕົວຢ່າງ:

var cars = ["Saab", "Volvo", "BMW"];

ທົດລອງເອງ

空格和折行并不重要。声明可横跨多行:

ຕົວຢ່າງ:

var cars = [
    "Saab",
    "Volvo",
    "BMW"

ທົດລອງເອງ

ບໍ່ຕ້ອງຂຽນຄຳສັງວັດຖຸພາຍຫຼັງວັດຖຸສຸດທ້າຍ (ອີງຕາມ "BMW",).

ອາດມີບັນຫາການເຊື່ອມຕໍ່ອາກາດບັນຊີ.

ໃຊ້ຄຳສັບພິມ JavaScript

ຕົວຢ່າງທີ່ລຽງອີກຈະສ້າງຈຸດການທີ່ຈະຈຸດວັດຖຸ, ແລະ ຈະຈຸດວັດຖຸຕ່າງໆ:

ຕົວຢ່າງ:

var cars = new Array("Saab", "Volvo", "BMW");

ທົດລອງເອງ

ຄຳນັ້ນສອງຄັ້ງມີຜົນທັງໝົດຄືກັນ. ບໍ່ຕ້ອງໃຊ້ new Array().

ສຳລັບຄວາມລະອຽດຄວາມເບິ່ງດີ ແລະ ຄວາມໄວຂອງການດຳເນີນ, ຍັງມີການໃຊ້ວິທີທຳອິດ (ວິທີຈຸດການຈຸດການ).

ພິສູດວັດຖຸຈຸດການ

ພວກເຮົາຜ່ານການອ້າງອີງບັນນິວຢູ່ຈຸດການເພື່ອອ້າງອີງວັດຖຸຈຸດການ.

ຄຳສັ່ງນີ້ໄດ້ເຂົ້າຫາຄູ່ຄວາມຂອງວັດຖຸຄັນທີໜຶ່ງຂອງ cars:

var name = cars[0];

ຄຳສັ່ງນີ້ໄດ້ປ່ຽນວັດຖຸຄັນທີໜຶ່ງຂອງ cars:

cars[0] = "Opel";

ຕົວຢ່າງ:

var cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars[0]; 

ທົດລອງເອງ

[0] ແມ່ນວັດຖຸຄັນທີໜຶ່ງໃນຈຸດການ. [1] ແມ່ນວັດຖຸຄັນທີສອງ. ບັນນິວຢູ່ຈຸດການເລີ່ມໃນ 0.

ປ່ຽນວັດຖຸຕົວເລກຂອງຈຸດການ

ຄຳສັ່ງນີ້ໄດ້ປ່ຽນວັດຖຸຄັນທີໜຶ່ງຂອງ cars:

cars[0] = "Opel";

ຕົວຢ່າງ:

var cars = ["Saab", "Volvo", "BMW"];
cars[0] = "Opel";
document.getElementById("demo").innerHTML = cars[0];

ທົດລອງເອງ

访问完整数组

通过 JavaScript,可通过引用数组名来访问完整数组:

ຕົວຢ່າງ:

var cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars; 

ທົດລອງເອງ

数组是对象

数组是一种特殊类型的对象。在 JavaScript 中对数组使用 typeof 运算符会返回 "object"。

但是,JavaScript 数组最好以数组来描述。

数组使用ໂຕລະສັບ来访问其“元素”。在本例中,person[0] 返回 Bill:

数组:

var person = ["Bill", "Gates", 62];

ທົດລອງເອງ

对象使用名称来访问其“成员”。在本例中,person.firstName 返回 Bill:

对象:

var person = {firstName:"Bill", lastName:"Gates", age:19};

ທົດລອງເອງ

数组元素可以是对象

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

正因如此,您可以在相同数组中存放不同类型的变量。

您可以在数组保存对象。您可以在数组中保存函数。你甚至可以在数组中保存数组:

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

数组属性和方法

JavaScript 数组的真实力量隐藏在数组的属性和方法中:

ຕົວຢ່າງ:

var x = cars.length;   // length 属性返回元素的数量
var y = cars.sort();   // sort() 方法对数组进行排序

ພວກເຮົາຈະຮຽນການສາຍລະບາຍອາກາດໃນປີສີນລາວ.

length 属性

length ບັນດາບັນທັກຈະປະກອບຄວາມຍາວຂອງອາກາດ (ຈຳນວນສິ່ງ).

ຕົວຢ່າງ:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;                       // fruits 的长度是 4

ທົດລອງເອງ

length ບັນດາບັນທັກຈະຫຼາຍກວ່າດັດຊະນະສຸດທ້າຍຂອງອາກາດ (ບັນທາງ).

ການເຂົ້າເຖິງສິ່ງທໍາອິດຂອງອາກາດ

ຕົວຢ່າງ:

fruits = ["Banana", "Orange", "Apple", "Mango"];
var first = fruits[0];

ທົດລອງເອງ

ການເຂົ້າເຖິງສິ່ງສຸດທ້າຍຂອງອາກາດ

ຕົວຢ່າງ:

fruits = ["Banana", "Orange", "Apple", "Mango"];
var last = fruits[fruits.length - 1];

ທົດລອງເອງ

ຈັດການການອອກລາຍການອາກາດສິ່ງ

ການຈັດການການອອກລາຍການອາກາດແບບທີ່ມີຄວາມປອດໄພແມ່ນການໃຊ້ "for"ການດຳເນີນ: "

ຕົວຢ່າງ:

var fruits, text, fLen, i;
fruits = ["Banana", "Orange", "Apple", "Mango"];
fLen = fruits.length;
text = "<ul>";
for (i = 0; i < fLen; i++) {
     text += "<li>" + fruits[i] + "</li>";
} 

ທົດລອງເອງ

ເຈົ້າກໍ່ສາມາດນຳໃຊ້ Array.foreach() ກົນລະບົບ:

ຕົວຢ່າງ:

var fruits, text;
fruits = ["Banana", "Orange", "Apple", "Mango"];
text = "<ul>";
fruits.forEach(myFunction);
text += "</ul>";
function myFunction(value) {
  text += "<li>" + value + "</li>";
}

ທົດລອງເອງ

ສະເໜີສິ່ງໃໝ່ໃນຈຸດມາດຕະການ

ການສະເໜີສິ່ງໃໝ່ໃນຈຸດມາດຕະການຈະດີທີ່ສຸດແມ່ນ 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)

ທົດລອງເອງ

ຄໍາເຕືອນ!

ສະເໜີສິ່ງໃນຈຸດມາດຕະການສຸດທ້າຍຈະສ້າງຈຸດມາດຕະການບໍ່ມີຈຸດມາດຕະການ:

ຕົວຢ່າງ:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[6] = "Lemon";                 // ສະເໜີສິ່ງໃໝ່ໃນ fruits (Lemon)

ທົດລອງເອງ

ຈຸດມາດຕະການການຈັດອັນສັດ

ຫຼາຍສິ່ງທີ່ນຳໃຊ້ຈຸດມາດຕະການຊື່.

ຈຸດມາດຕະການຊື່ທີ່ມີຈຸດມາດຕະການຊື່ຈະເອີ້ນວ່າຈຸດມາດຕະການການຈັດອັນສັດ (ຫຼືອັນສັດຫຼອກ).

JavaScript ບໍ່ສາມາດນຳໃຊ້ຈຸດມາດຕະການຊື່.

ໃນ JavaScript ຈຸດມາດຕະການຈະນຳໃຊ້ບັນດາວັດສະດຸ.

ຕົວຢ່າງ:

var person = [];
person[0] = "Bill";
person[1] = "Gates";
person[2] = 62;
var x = person.length;          // person.length ກັບຄື 3
var y = person[0];              // person[0] ກັບຄື "Bill"

ທົດລອງເອງ

ຄໍາເຕືອນ!

ຖ້າເຈົ້ານຳໃຊ້ຄວາມຊື່ບັນທຶກຈຸດມາດຕະການ JavaScript ຈະການປ່ຽນຈຸດມາດຕະການເປັນອັນສັດພິເສດ.

ຫຼັງຈາກນັ້ນທຸກການພາສານຂອງຈຸດມາດຕະການຂອງຈຸດມາດຕະການຈະມີຜົນບໍ່ຖືກຕ້ອງ.

ຕົວຢ່າງ:

var person = [];
person["firstName"] = "Bill";
person["lastName"] = "Gates";
person["age"] = 62;
var x = person.length;         // person.length ຈະປະກາດ 0
var y = person[0];              // person[0] ຈະປະກາດ undefined

ທົດລອງເອງ

ການແຕກຕ່າງບັນດາ Array ແລະ Object

ໃນ JavaScriptArrayບໍ່ຄິດວ່າບັນດາວັດສະດຸ.

ໃນ JavaScriptໂອບີເຈັນບໍ່ຄິດວ່າຕົວເມືອງນຳມາເລືອກ.

Array ແມ່ນຊະນິດຂອງ Object ທີ່ມີບັນດາວັດສະດຸທີ່ແບບເບື້ອງຂອງໂຕລະສັບ.

ຖ້າຈະໃຊ້ Array ຫຼື Object?

  • JavaScript ບໍ່ສາມາດສະໜັບສະໜູນ Array ທີ່ມີຕົວເມືອງຜູ້ຈັດການ.
  • ຖ້າທີ່ຈະຫວັງວ່າຕົວເມືອງຈະເປັນຄຳເວົ້າ (ຂຽນ)ຖ້າທີ່ຈະໃຊ້ໂອບີເຈັນ.
  • ຖ້າທີ່ຈະຫວັງວ່າຕົວເມືອງຈະເປັນໂຕລະສັບຖ້າທີ່ຈະໃຊ້Array.

ຫຼີກລ່ຽງຄວາມພັດທະນາ new Array()

ບໍ່ມີຄວາມຈຳເປັນທີ່ຈະໃຊ້ຄວາມພັດທະນາ Array ພາຍໃນ JavaScript new Array().

ຂ້ອຍຫວັງວ່າຈະໃຊ້ [] ຖ້າວ່າບໍ່ຈະເຮັດແນວນັ້ນ!

ຄຳວຽກງານທີ່ແຕກຕ່າງກັນທີ່ສ້າງບັນດາວັດສະດຸທີ່ບໍ່ມີຕົວເມືອງ points ຢ່າງໃດ:

var points = new Array();         // ບໍ່ດີ
var points = [];                  // ດີ

ຄຳວຽກງານທີ່ແຕກຕ່າງກັນທີ່ສ້າງບັນດາວັດສະດຸທີ່ມີຫົກໂຕນໃໝ່:

var points = new Array(40, 100, 1, 5, 25, 10); // ບໍ່ດີ
var points = [40, 100, 1, 5, 25, 10];          // ດີ

ທົດລອງເອງ

new ຄຳວຽກງານຈະເຮັດໃຫ້ກະຕຸ້ນຄຳລະບຸການ. ມັນຍັງຈະສ້າງຜົນທີ່ບໍ່ຄາດຄິດໄດ້:

var points = new Array(40, 100);  // ສ້າງບັນດາວັດສະດຸທີ່ມີສອງປະກອບ (40 ແລະ 100)

ຖ້າທີ່ລຶບປະກອບຫນຶ່ງອອກຈະເປັນແນວໃດ?

var points = new Array(40);       // ສ້າງບັນດາວັດສະດຸທີ່ບໍ່ມີຄວາມພິຈາລະນາ 40!

ທົດລອງເອງ

ບວກວ່າບັນດາວັດສະດຸ

ບັນຫາທົ່ວໄປຈະເປັນ: ຂ້ອຍຈະຮູ້ວ່າວ່າຄວາມເປັນ Array ຢ່າງໃດ?

ບັນຫາຢູ່ທີ່ຄຳໃຊ້ JavaScript operator typeof ປະກາດ 'object“:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
typeof fruits;             // ປະກາດ 'object'

ທົດລອງເອງ

ການແທນພາສາຂອງຄຳໃຊ້ 'typeof' ປະກາດ 'object' ຍ້ອນວ່າ JavaScript Array ແມ່ນເປັນບັນດາວັດສະດຸ。

ການແກ້ໄຂ 1:

ເພື່ອແກ້ໄຂບັນຫານີ້, ECMAScript 5 ໄດ້ອອກຂອງກົນລະບົບໃໝ່ Array.isArray():

Array.isArray(fruits);     // ກັບຄວາມແນ່ນອນ

ທົດລອງເອງ

ບັນຫາຂອງການແກ້ໄຂນີ້ແມ່ນ ECMAScript 5 ບໍ່ສາມາດອະທິບາຍສະໜອງສັບສະນະອັນເກົ່າ.

ການແກ້ໄຂ 2:

ສ້າງທີ່ຂອງເຈົ້າເອງ isArray() ກົນລະບົບການແກ້ໄຂທີ່ພົບຄວາມບັນຫານີ້:

function isArray(x) {
    return x.constructor.toString().indexOf("Array") > -1;
}

ທົດລອງເອງ

ຖ້າປະເທດງານເປັນອັນໜັງສະໜອງ, ກົນລະບົບຂອງຫົວພາບຈະກັບຄືວ່າຄວາມແນ່ນອນ.

ຫຼືການອະທິບາຍທີ່ຫຼາຍກວ່າ: ຖ້າອັນໜັງທີ່ສະແດງປະກອບທີ່ກວມມີຄຳເວົ້າ "Array" ກໍ່ຈະກັບຄືວ່າຄວາມແນ່ນອນ.

ການແກ້ໄຂ 3:

ຖ້າອັນໜັງໄດ້ຖືກສ້າງຈາກຄວາມສ້າງທີ່ເກີດຈາກ instanceof ກົນລະບົບການກະທຳຄື

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits instanceof Array     // ກັບຄວາມແນ່ນອນ

ທົດລອງເອງ