---
# System prepended metadata

title: '[筆記]JavaScript：物件(Object)、陣列(Array)介紹'
tags: [array, object]

---

# [筆記]JavaScript：物件(Object)、陣列(Array)介紹
下面內容引用自[重新認識 JavaScript: Day 04 物件、陣列以及型別判斷](https://ithelp.ithome.com.tw/articles/10190962)、六角學院、[PJCHENDer部落格](https://pjchender.blogspot.com/2016/01/javascriptobject.html)、[你懂 JavaScript 嗎？#17 物件（Object)](https://cythilya.github.io/2018/10/24/object/)、[MDN-JavaScript 物件基礎概念](https://developer.mozilla.org/zh-TW/docs/Learn/JavaScript/Objects/Basics)
## 何謂物件（Object）？
### 所有基本型別 (Primitives) 以外的值都是物件。
我們可以從 [ECMA 262](https://www.ecma-international.org/ecma-262/6.0/) 標準來看物件的定義
> 「An object is a collection of properties and has a single prototype object.」

翻成白話文就是，物件是一個從零至多種屬性的集合，而**屬性是鍵 (key) 與值 (value) 之間的關聯**。 一個屬性的「值」可以是某個基本型別（string、number、boolean等），也可以是另一個物件，甚至可以是一個函數。
物件可以是瀏覽器預先定義好的，當然也可以是由自己定義物件的屬性與內容。

> 覺得太複雜嗎？沒關係，那請先記得物件（Object）就是很多「名稱與值」（key-value）的配對。重點在於值可以放入哪些種類？
1.  原生的值（primitive），像是布林值（Boolean）、數值（Number）或是字串（String），而在物件當中，我們把這類的值稱做屬性（Property）。
2.  物件（Object），也就是在一個物件裡面再嵌入一個物件，這種以物件為值的情況我們也把它稱作屬性（Property）。
3.  函數（function），在物件的情況下，我們會把這種函式稱做方法（method）。

>補充：這三種類型的值在口語上又被分為屬性和方法（這邊說的屬性和物件的屬性無關！）[屬性（property）與值（value）名詞確認](https://www.udemy.com/javascript-learning/learn/lecture/6789162#questions/7628838)
## 物件及屬性
早期，要建立一個自定義的物件可能會透過 new 關鍵字來建立一個物件實體，再替這個物件新增屬性與方法：
```javascript=
var person = new Object();

person.name = 'Andy';
person.job = 'Front-end developer';
person.sayName = function() {
  alert( this.name );
};
```
後來，另一種建立物件的方式更為簡便，也是目前最常見的：
```javascript=
var person={
  name: 'ANDY',
  job: 'Front-end developer',
  sayName: function() {
    alert( this.name );
  }
}
```
1. > 這種建立物件的方式稱為「**物件實字** (Object literal)」，同時也是 `JSON` 格式的核心語法。
2. > 用大括號將要新增屬性方法直接放入
## 屬性存取方式介紹
### dot notation `.` 點陣法
用法如下
```javascript=
var farm={
   farmer:['Andy','Jacky','Allen'],
   fruit:['banana','apple'],
   location:'taipei'
}
console.log(farm.farmer[0]) //Andy
我們可以透過·.·來進行存取
```
> 注意：dot notation不能存取以數字開頭屬性或其他([不合法的 JavaScript 的識別字](http://www.ablmcc.edu.hk/~scy/home/javascript/identifier.htm))，但可以存取關鍵字、保留字、＄或底線
### bracket notation `[]` 括弧記法
用法如下
```javascript=
var farm={
   farmer:['Andy','Jacky','Allen'],
   fruit:['banana','apple'],
   location:'taipei'
}
console.log(farm['farmer'][0]) //Andy
我們可以透過·[]·來進行存取
```
>[ ] 裡面如果放的是字串而不是變數，要記得加上引號’‘ 
## 屬性新增/刪除/判斷是否存在
### 屬性新增
直接用＝即可，用法如下
```javascript=
var object={}
object.name='Andy'

object.name; //Andy
```
### 屬性刪除
```javascript=
var object={}
object.name='Andy'

delete object.name; 
object.name; //undefined
```

### 判斷屬性是否存在
使用 in 或 hasOwnProperty()
```javascript=
var obj = {
  name: 'Object'
};

// 透過 in 檢查屬性
console.log( 'name' in obj );     // true
console.log( 'value' in obj );    // false

// 透過 hasOwnProperty() 方法檢查
obj.hasOwnProperty('name');       // true
obj.hasOwnProperty('value');      // false
```

## 陣列介紹
陣列簡單來說就是存取一系列的值，且值與值之間是有相關聯的 EX：農場裡的玉米田A、玉米田B

更詳細說法我們引用自Kuro大大文章 如下
> JavaScript 的陣列可以看作是一種特別的「物件」，同樣是零至多個元素的集合，且並沒有規定它能放什麼東西進去。 陣列內可以是原始的資料類型、其他陣列、函式、物件等等。 要注意的是，陣列是個有順序性的集合，且只能透過 `[] `來存取。

建立陣列同樣也可以透過 new 關鍵字來建立
```javascript=
var a = new Array();

a[0] = "apple";
a[1] = "boy";
a[2] = "cat";

a.length;   // 3
```
實務上，還是比較常用陣列實字 (Array literal)
```javascript=
var a = [];

a[0] = "apple";
a[1] = "boy";
a[2] = "cat";

a.length;   // 3

或是
var a=['apple','boy','cat']
a.length;  // 3
```
陣列的長度可以由 `ARRAY.length` 來取得，而且 `length` 這個屬性的值是可以被覆寫的。範例如下
```javascript=
var a=['apple','boy','cat']
a.length; //3

故意將長度更改為1
a.length=1;
console.log(a); //["apple"]

a.length=3;
console.log(a); // ["apple", undefined, undefined]
```
> 上面的例子中，陣列 a 原本的長度為 3，後來透過 a.length = 1; 設定成 1 之後，後面的元素就被移除了。即使之後再度修改成 a.length = 3;，後面的兩個元素也只會被 undefined 所填補。

所以，我們發現陣列長度可以隨時增加或減少，
```javascript=
var array = ['a', 'b', 'c'];
array.length;         // 3

array[7] = 'z';
console.log(array);   // ["a", "b", "c", undefined, undefined, undefined, undefined, "z"]
```
最後，來介紹一下如何新增陣列中的值 `ARRAY.push()`
```javascript=
var array = ['a', 'b', 'c'];
array.push('d');
console.log(array); //['a', 'b', 'c','d']
```
其他的增減方法，如 `ARRAY.pop()`、 `ARRAY.shift()` 、 `ARRAY.unshift()` 可以到 [MDN Array](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array)了解

###### tags: `object` `array`






