1. 程式人生 > >2 js基礎

2 js基礎

[] 匹配 使用方式 所有 com doc ret put innertext

# JS基礎操作

## 一、分支結構

#### 1、if語句

- if 基礎語法

```js
if (條件表達式) {
代碼塊;
}
// 當條件表達式結果為true,會執行代碼塊;反之不執行
// 條件表達式可以為普通表達式
// 0、undefined、null、""、NaN為假,其他均為真
```

- if 復雜語法

```js
// 1.雙分支
if (表達式1) {
代碼塊1;
} else {
代碼塊2;
}

// 2.多分支
if (表達式1) {

} else if (表達式2) {

}
...
else if (表達式2) {

} else {

}
```

- if 嵌套

```js
if (表達式1) {
if (表達式2) {

}...
}...
```

#### 2、switch語句

```js
switch (表達式) {
case 值1: 代碼塊1; break;
case 值2: 代碼塊2; break;
default: 代碼塊3;
}
// 1.表達式可以為 整數表達式 或 字符串表達式
// 2.值可以為 整數 或 字符串
// 3.break可以省略
// 4.default為默認代碼塊,需要出現在所有case最下方,在所有case均未被匹配時執行
```

## 二、循環結構

#### 1、for循環

```js
for (循環變量①; 條件表達式②; 循環變量增量③) {
代碼塊④;
}
// 1.循環變量可以在外、在內聲明
// 2.執行邏輯 ① ②④③ ... ②④③ ②,入口為①,出口為②,②④③個數為[0, n]
```

#### 2、while循環

```js
while (條件表達式) {
代碼塊;
}
```

#### 3、do...while循環

```js
do {
代碼塊;
} while (條件表達式);
```

#### 4、for...in循環

```js
obj = {"name": "zero", "age": 8}
for (k in obj) {
console.log(k, obj[k])
}
// 用於遍歷對象:遍歷的結果為key,通過[]語法訪問對應的value
```

#### 5、for...of循環

```js
iter = [‘a‘, ‘b‘, ‘c‘];
for (i of iter) {
console.log(iter[i])
}
// 1.用於遍歷可叠代對象:遍歷結果為index,通過[]語法訪問對應的value
// 2.ES6新增,可叠代對象有 字符串、數組、Map、Set、Anguments、NodeList等
```

#### 6、break,continue關鍵詞

- break:結束本層循環
- continue:結束本次循環進入下一次循環

## 三、異常處理

```js
try {
易錯代碼塊;
} catch (err) {
異常處理代碼塊;
} finally {
必須邏輯代碼塊;
}
// 1.err為存儲錯誤信息的變量
// 2.finally分支在異常出現與否都會被執行
```

```js
throw "自定義異常"
// 必要的時候拋出自定義異常,要結合對應的try...catch使用
```

## 四、函數初級

#### 1、函數的定義

- ES5

```js
function 函數名 (參數列表) {
函數體;
}

var 函數名 = function (參數列表) {
函數體;
}
```

- ES6

```js
let 函數名 = (參數列表) => {
函數體;
}
```

- 匿名函數

```js
(function (參數列表) {
函數體;
})

// 匿名函數需要自調用
(function (參數列表) {
函數體;
})(參數列表);
```

#### 2、函數的調用

- 函數名(參數列表)

#### 3、函數的參數

- 個數不需要統一

```js
function fn (a, b, c) {
console.log(a, b, c); // 100 undefined undefined
}
fn(100);

function fn (a) {
console.log(a) // 100
}
fn(100, 200, 300) // 200,300被丟棄
```

- 可以任意位置具有默認值

```js
function fn (a, b=20, c, d=40) {
console.log(a, b, c, d); // 100 200 300 40
}
fn(100, 200, 300);
```

- 通過...語法接收多個值

```js
function fn (a, ...b) {
console.log(a, b); // 100 [200 300]
}
fn(100, 200, 300);
// ...變量必須出現在參數列表最後
```

#### 4、返回值

```js
function fn () {
return 返回值;
}
// 1.可以空return操作,用來結束函數
// 2.返回值可以為任意js類型數據
// 3.函數最多只能擁有一個返回值
```

## 五、事件初級

- onload:頁面加載完畢事件,只附屬於window對象
- onclick:鼠標點擊時間
- onmouseover:鼠標懸浮事件
- onmouseout:鼠標移開事件

## 六、JS選擇器

#### 1、getElement系列

```js
// 1.通過id名獲取唯一滿足條件的頁面元素
document.getElementById(‘id名‘);
// 該方法只能由document調用

// 2、通過class名獲取所有滿足條件的頁面元素
document.getElementsByClassName(‘class名‘);
// 該方法可以由document及任意頁面元素對象調用
// 返回值為HTMLCollection (一個類數組結果的對象,使用方式同數組)
// 沒有匹配到任何結果返回空HTMLCollection對象 ([])

// 3.通過tag名獲取所有滿足條件的頁面元素
document.getElementsByTagName(‘tag名‘);
// 該方法可以由document及任意頁面元素對象調用
// 返回值為HTMLCollection (一個類數組結果的對象,使用方式同數組)
// 沒有匹配到任何結果返回空HTMLCollection對象 ([])
```

#### 2、querySelect系列

```js
// 1.獲取第一個匹配到的頁面元素
document.querySelector(‘css語法選擇器‘);
// 該方法可以由document及任意頁面對象調用

// 2.獲取所有匹配到的頁面元素
document.querySelectorAll(‘css語法選擇器‘);
// 該方法可以由document及任意頁面對象調用
// 返回值為NodeList (一個類數組結果的對象,使用方式同數組)
// 沒有匹配到任何結果返回空NodeList對象 ([])
```

#### 3、id名

- 可以通過id名直接獲取對應的頁面元素對象,但是不建議使用

## 七、JS操作頁面內容

- innerText:普通標簽內容(自身文本與所有子標簽文本)

- innerHTML:包含標簽在內的內容(自身文本及子標簽的所有)
- value:表單標簽的內容
- outerHTML:包含自身標簽在內的內容(自身標簽及往下的所有)

## 八、JS操作頁面樣式

- 讀寫 style屬性 樣式

```js
div.style.backgroundColor = ‘red‘;
// 1.操作的為行間式
// 2.可讀可寫
// 3.具體屬性名采用小駝峰命名法
```

- 只讀 計算後 樣式

```js
// eg: 背景顏色
// 推薦
getComputedStyle(頁面元素對象, 偽類).getPropertyValue(‘background-color‘);
// 不推薦
getComputedStyle(頁面元素對象, 偽類).backgroundColor;

// IE9以下
頁面元素對象.currentStyle.getAttribute(‘background-color‘);
頁面元素對象.currentStyle.backgroundColor;

// 1.頁面元素對象由JS選擇器獲取
// 2.偽類沒有的情況下用null填充
// 3.計算後樣式為只讀
// 4.該方式依舊可以獲取行間式樣式 (獲取邏輯最後的樣式)
```

- 結合 css 操作樣式

```js
頁面元素對象.className = ""; // 清除類名
頁面元素對象.className = "類名"; // 設置類名
頁面元素對象.className += " 類名"; // 添加類名
```

2 js基礎