[TOC]
# JavaScript基礎
## JavaScript的特點
1. 解釋型語言:解釋型語言直接在運行環境中執行代碼,一般一來說,與編譯型語言相比,解釋型語言的開發更為容易。
2. 類似于C和Java的語法結構
3. 動態語言:動態語言的變量和函數是不指定返回值類型的。
4. 基于原型的面向對象
5. 字面量的表現能力
6. 函數式編程:很長的一段時間里都被隱藏于過程式編程(面向對象也是過程式編程的一種)的概念至下。由于具備了匿名函數,可以把函數作為對象來使用,所以同時也能夠支持函數式編程。
## 變量的基礎
變量的作用是給某一個值或是對象標注名稱,通過使用關鍵字`var`就可以對變量進行聲明。
### 變量的使用方法
```javascript
var foo; // 聲明變量
foo = 'abc'; // 對變量進行賦值
var foo2 = 'def'; // 聲明變量并賦值
```
讀取沒有被聲明的變量,就會引發`ReferenceError`異常。
## 省略var
不通過`var`聲明的變量為隱式聲明變量,會變為全局變量,即使在函數體內也是。
### 常量
```javascript
const FOO = 'abc'; // 通過關鍵詞 const 進行聲明, 習慣上變量名為大寫。
```
即使給常量再次賦值,這個常量的值也不會發生改變。其實,對常量再次賦值是一種錯誤。
## 函數基礎
函數是由一連串的子程序(語句的集合)所組成的,可以被外部程序調用。向函數傳遞參數之后,函數可以訪問一定的值。
### 函數的聲明與調用
```javascript
function 函數名 (參數, 參數, ...){
函數體
}
function sum(a,b){
return a + b;
}
```
### 匿名函數
其語法形式為在`function`后省略函數名的函數。
```javascript
function (參數, 參數, ...){
函數體
}
```
匿名函數表達式是一種表達式而非語句,所以也可以在表達式內使用。匿名函數的返回值是一個`Function`對象的引用。
```javascript
var sum = function(a,b){
return a + b;
}
```
### 函數是一種對象
JavaScript中的函數也是一種對象。函數名存在的意義是為了調用沒有名稱的函數。函數是一種包含了可執行代碼并能夠被其他代碼調動的特殊的對象。
## 對象基礎
### 對象的定義
是一個名稱與值配對的集合。這種名稱與值的配對被稱為屬性。JavaScript對象可以定義為屬性的集合。JavaScript具備一種稱為原型鏈的構造。通過這一構造,JavaScript對象實現了類似于類的繼承能力。
### 對象字面量表達式與對象的使用
```javascript
{
屬性名: 屬性值,
屬性名: 屬性值
}
```
屬性名可以是標識符、字符串值或是數值。屬性值則可以是任意的值或對象。
```javascript
{
a: 'abc',
1: '1'
}
```
在版本較老的IE中不支持以逗號結尾的對象字面量。
### 屬性訪問
```javascript
var obj = {
a: 'abc',
b: 'cba'
}
// 點運算符
obj.a // 'abc'
obj.c = 'ccc'; // 賦值
// 括號方式
obj[a] // 'abc'
obj['d'] = 'ddd'; // 賦值
```
### 方法
可以把任意類型的值、對象或者函數賦值給對象的屬性。實際上作為對象屬性的函數也可稱為一種方法。
```javascript
var obj = {
sum: function(a, b){
return a + b;
}
}
obj.sum(1,2); // 3
```
### new 表達式
`new`表達式的作用是生成一個對象。
```javascript
var obj = new Object();
```
`new`之后所寫的是函數名,在`new`之后寫函數名的話,就會把該函數作為構造函數進行調用。
## 數組的基礎
數組是一種用于表達有順序關系的值的集合的語言結構。
```javascript
var arr = [1, 100, 1000];
```
數組內的各個值被稱作為元素,每一個元素都可以通過索引(下標)來快速讀取
```javascript
var arr = [1, 100, 1000];
arr[0]; // 1
arr[1]; // 100
```
JavaScript的數組支持同時包含不同類型的元素。