1. 程式人生 > >前端學習第63天,js基礎

前端學習第63天,js基礎

一.js三個組成部分

ES: ECMAScript語法
- DOM: document物件模型 => 通過js程式碼與頁面文件(出現在body中的所有視覺化標籤)進行互動
- BOM: borwser物件模型 => 通過js程式碼與瀏覽器自帶功能進行互動

二.引入方式

- 行間式

```
出現在標籤中的全域性事件屬性中
this代表該標籤, 可以訪問全域性屬性, 再訪問具體操作物件(eg: this.style.color = "red")
```

- 內聯式

```
出現在script指令碼標籤中
可以通過標籤的id唯一標識,在js程式碼塊中操作頁面標籤
js採用的是小駝峰命名規範, 屬於解釋性語言(由上至下依次解釋執行)
```

- 外聯式

```
通過script標籤的src屬性連結外部js檔案, 連結後, script標籤本身內部的js程式碼塊將會被遮蔽
在任何位置都可以使用this物件,當this物件不指向任意一個標籤時,代表的是window物件
```

- js具體出現的位置

```
head標籤的底部: 依賴性js庫
body標籤的底部(body與html結束標籤的之間): 功能性js指令碼
```

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>js引入</title>
    <!--js出現的第一個位置-->
    <script>
        // 一般為 依賴型JS庫
    </script>
</head>
<body>
    <!--指令碼:一段功能程式碼塊, 可以巢狀在其他語言中使用, 完成一些額外的功能-->
    <!--js可以用來書寫指令碼, js就是指令碼語言, 書寫在script標籤中-->
    <!--js三個組成部分:ES(ECMAScript)語法 | DOM(document object model) | BOM(browser object model)-->
    <script>

    </script>

    <!--1.行間式-->
    <!--i) 行間式程式碼塊書寫在一個個全域性事件名屬性中,沒有script這樣的一個全域性屬性-->
    <!--ii) 在某一個標籤的某一個事件屬性值中,出現的this代表該標籤-->
    <!--iii) 該標籤物件this可以訪問該標籤的任意全域性屬性(eg:style),
    然後再間接訪問具體需要操作的物件(style.color)-->
    <div id="ddd" onmouseover="this.style.color = 'red'" onmouseleave="this.style.color = 'blue'">這是一個擁有行間式js的div</div>

    <!--2.內聯式-->
    <!--i) 可以通過標籤的id(唯一標識),在js程式碼塊中訪問到該標籤(js的選擇器)-->
    <!--ii) js程式碼塊中語法採用的是小駝峰命名法, 屬性的值都是用字串形式進行賦值-->
    <!--iii) js屬於解釋性語言,所有載入順序會影響執行結構 => 內聯式的script標籤出現的位置-->
    <script>
        ddd.style.backgroundColor = "pink"
    </script>

    <!--3.外聯式-->
    <!--i) 通過script標籤的src資料鏈接外部js檔案-->
    <!--ii) 使用外聯的script(擁有src屬性)標籤,會遮蔽掉標籤內部的js程式碼塊-->
    <!--iii) 在js任意地方,均由this物件,this物件不指向任何標籤時,指向的是window物件-->
    <script src="js/01.js">
        // 被遮蔽掉的程式碼塊
        ddd.style.fontSize = "100px";
    </script>
</body>
<!--js出現的第二個位置-->
<script>
    // 一般為 功能性JS指令碼
</script>
</html>

三.變數的定義

```js
四種定義變數的方式
語法: 關鍵詞 變數名 = 變數值

num = 10; // 省略關鍵詞, 定義的為全域性變數, 在任何位置定義, 在任何位置都可以訪問, 但不建議使用
var num = 10; // var關鍵詞, 無塊級作用域, 定義在塊級作用域中的變數, 外界也可以訪問
let num = 20; // let關鍵詞, 有塊級作用域, 定義在塊級作用域中的變數, 外界無法訪問
const NUM = 30; // const關鍵詞,有塊級作用域, 定義在塊級作用域中的變數, 外界無法訪問, 且變數的值不能再被二次修改, 所以為常量

/* 產生塊級作用域的方式
{
直接書寫
}
if語句可以產生
while語句可以產生
for語句也可以產生
*/

// 函式可以產生區域性作用域, 除了定義在區域性作用域中的全域性變數(沒有關鍵字的變數宣告), 外界可以訪問, 其他定義方式, 外界都不可以訪問
```

```js
// ES5 | ES6
// 是ECMAScript兩個語法版本, ES6是ES5之後的一個版本, 但是對ES5向下相容, ES6中支援ES5語法
```

```js
// 命名規範
// 變數命名規範
// 可以由哪些組成: 字母, 數字, _, $, 中文(一般不考慮)
// 可以以什麼開頭: 字母, _, $, 中文
// 不能出現什麼: 關鍵字, 保留字
// 提倡什麼書寫規範: 小駝峰, 支援_連線語法
好的 = "真好";
console.log(好的);
```

四.三種彈出框

```js
// 普通彈出框
// alert("你丫真帥!!!");

// 輸入框: 以字串形式接收使用者輸入內容
// var info = prompt("請輸入內容:");
// console.log(info)

// 確認框: 根據使用者選擇確認或取消, 得到 true | false 兩個布林結果
// var res = confirm("你是豬嗎?");
// console.log(res)
```

五.資料型別

```js
// 值型別
var a = 10; // Number 10
var a = 'abc'; // String abc
var a = true; // Boolean true
var a = undefined // undefined undefined
// 引用型別
var a = function(){} // function f(){}
var a = {} // Object {}
var a = null // Null null

// 其他Object具體體現
Array | Date | RegExp
```

## 六.值型別的型別轉換

```js
// 1.通過型別宣告轉換
Number() | String() | Boolean()

// 2.方法(函式)
parseInt('10') | parseFloat('3.14')
123..toString()

// 3.隱式轉換
+'10' => 10
'' + 10 => '10'
```

!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>資料型別轉換</title>
</head>
<body>
    number | boolean | string 之間相互轉換
</body>
<script>
    // 1. number 與 boolean型別
    // boolean型別的true就是數字1, false就是數字0
    console.log((true + true) * 10 * false)
    // number 中 0, NaN 可以直接當false來使用, 其他的都可以當true來使用

    // 2. string,boolean 轉換為 number
    var a = '10'; // => 10
    a = '3.14';  // => 3.14
    a = '3.14.15';  // => NaN
    var b = true;

    var n1 = Number(a);
    console.log(n1)
    var n2 = Number(b);
    console.log(n2)

    a = '3.14.15';  // 3.14
    a = 'a3.14';  // NaN
    console.log(parseFloat(a));

    a = '3.94.15';  // 3
    console.log(parseInt(a));

    // 體現弱語言型別
    a = '10';
    var res = +a; // number 10
    console.log(typeof(res), res)

    // 3.number, string 轉換為 boolean
    // 在分支或迴圈判斷中, 系統會將數字與字串型別自動轉換為布林型別
    // 不在判斷中, 如何轉換
    console.log(Boolean(""));
    console.log(Boolean(0));
    console.log(Boolean(NaN));
    console.log(Boolean(null));

    console.log(Boolean("1"));
    console.log(Boolean(-100));

    // 4.number, boolean 轉換為 string
    console.log(String(true));
    console.log(String(1));

    var a = 123;
    console.log(a.toString());
    console.log(123..toString());
    console.log(3.14.toString());

    var c = 123 + "";
    console.log(typeof c, c);

    // 用例
    var z1 = 2 + +"5";  // 7
    z1 = 2 + "5"; // "25"
    // z1 = 2 ++"5";  // 語法錯誤 ++連在一起是 ++語法(瞭解)
    var z2 = "5" - 2;  // 3
    console.log(z1, z2);

    // 補充
    // NaN與NaN不相等
</script>
</html>