JavaScript-前端學習二階段-周1.md

目錄

 

## 一、javascript初識

## 二、鼠標事件

## 三、變量

## 四、js操作元素內容

## 五、操作表單

## 六、操作元素屬性

## 七、操作img的src

## 八、操作元素樣式

## 九、批量樣式設置: cssText

## 十、數據類型

## 十一、運算符

## 十二、條件語句

## 十三、獲取元素的方式

## 十四、循環


## 一、javascript初識

### 1、 概念 

   1. javascript是基於對象和事件驅動的解釋性腳本語言;

   2. 特性: 

      1. 基於對象: 可以運用自己創建的對象

      2. 事件驅動: javascript可以直接對用戶或者客戶端的操作進行響應

      3.  解釋性: 相對編譯性來說, 瀏覽器可以直接識別和解析代碼

      4.  跨平臺性: 只要是瀏覽器就可以運行

   3. js組成部分

      1. ECMAScript: 用來指定javascript語法標準, 核心

      2. DOM: Document Object Model 文檔對象模型

      3. BOM: Browser Object Model 瀏覽器對象模型

 

### 2、 js引入方式

 

   1. 行內引入: 事件驅動, 給元素加上對應的事件, 不常用

 

      ```javascript

      <div class="box" οnclick="alert(1)">這是一個div</div>

      ```

 

   2. 內嵌: script雙標籤, script標籤可以放置於任何位置,推薦放於body的結束標籤之前, 工作少用, 學習常用

 

      ```javascript

      <script>

          alert(3);

      </script>

      ```

 

   3. 外鏈: script雙標籤, script標籤可以放置於任何位置, 用src將地址引入進來, 工作常用

 

      ```javascript

      <script src="test.js"></script>

      ```

 

   4. 注意事項: 

 

      ```javascript

          // 注意: 1. 從上到下的順序執行, 遇到script標籤會停止執行去運行script標籤中的代碼,script標籤中代碼執行完成後再繼續執行其他代碼

              // 2. 外鏈的script標籤中寫其他js代碼,其他js代碼不會執行

          <script>

              // 阻斷頁面

              alert(2);

          </script>

          <script src="test.js">

              // 不會執行

              alert(1);

          </script>

      ```

 

   5. 註釋: 

 

      1. 單行註釋: ctrl + /

      2. 多行註釋: ctrl + shift + /  ||  ctrl + alt + a

 

### 3、 調試工具

 

   1. alert(要彈出的內容):  警告框,讓用戶看到提示, 阻斷頁面

   2. console.log(要輸出的內容): 輸出在控制檯, 右鍵---> 檢查--->console

 

### 4、獲取元素(id): document.getElementById('id')

 

   ```javascript

           // 獲取元素方式: 通過id獲取

           // 語法: document.getElementById('id');

           // document: 文檔

           // get: 得到

           // Element: 元素

           // ById: 通過id

   document.getElementById('box')

   ```

 

### 5、 事件三部曲: 

 

   元素添加事件三部曲: 

 

     1. 得到元素 document.getElementById('box')

 

     2. 添加事件: .事件 = function(){}

 

     3. 具體要做的事情: alert(2);

 

   ```javascript

           document.getElementById('box').onclick = function(){

               alert(2);

           }

   ```

## 二、鼠標事件

 

1. 單擊事件: onclick

 

   ```javascript

           document.getElementById('box').onclick = function(){

               alert(2);

           }

   ```

 

2. 雙擊: ondblclick

 

   ```javascript

           document.getElementById('box').ondblclick = function(){

               alert(3);

           }

   ```

 

3. 鼠標移入: onmouseover/ onmouseenter

 

   ```javascript

           // onmouseenter: enter中子元素不會觸發父元素身上的事件

           // onmouseover: over中子元素會觸發父元素的事件

           // document.getElementById('box').onmouseenter = function(){

           //     console.log(1);

           // }

           document.getElementById('box').onmouseover = function(){

               console.log(2);

           }

   ```

 

4. 鼠標移出: onmouseout / onmouseleave

 

5. 鼠標按下: onmousedown

 

   ```javascript

           document.getElementById('box').onmousedown = function(){

               // alert(3);

               console.log(1);

           }

   ```

 

6. 鼠標擡起: onmouseup

 

   ```javascript

           document.getElementById('box').onmouseup = function(){

               // alert(4);

               console.log(2);

           }

   ```

 

7. 鼠標移動:onmousemove

 

   ```javascript

         document.getElementById('box').onmousemove = function(){

                 console.log(5);

           }

   ```

 

8. 鼠標右鍵菜單: oncontextmenu

 

   ```javascript

         document.getElementById('box').oncontextmenu = function(){

            console.log(6);

        }

   ```


 

## 三、變量

> 用來存儲數據的容器

 

###  1、 聲明

 

- 先聲明後賦值  

   - 單個聲明: var 變量名; 變量名 = 值;  

   - 多個聲明: var 變量名1, 變量名2, ... , 變量名n; 變量名1 = 值; 變量名2 = 變量名3 = 值2;

 

- 聲明的同時並賦值  

   - 單個聲明: var 變量名 = 值;  

   - 多個聲明: var 變1 = 值1, 變2 = 值2, ..., 變n = 值n;

 

   ```javascript

           var val;

           val = 10;

           console.log(val);

   

           var val1, val2, val3;

           val1 = 20;

           val2 = val3 = 30;

           console.log(val1, val2, val3);

   

           var newNum = 30;

           console.log(newNum);

   

           var newNum1 = 20, newNum2 = 30;

           console.log(newNum1, newNum2);

   ```

 

### 2、 變量的命名規範: 

 

- 遵循駝峯命名法, 見名知意; userLoginName, userPassword

 

- 變量由字母、數字、_、$組成, 數字不能開頭

 

- 不能使用關鍵字和保留字

 

- 不能重複, 後面的會覆蓋前面的

 

### 3、 window.onload = function(){}

 

> 作用: 等待窗口(頁面及資源)加載完成後在執行其中的代碼

 

   ```javascript

       window.onload = function () {

           console.log(1);

           var oDiv = document.getElementById('box');

           console.log(oDiv);

           oDiv.onclick = function () {

               alert(2);

           }

           oDiv.onmousedown = function () {

               console.log(7);

           }

       }

   ```



 

## 四、js操作元素內容

 

###  1、獲取

 

   * 標籤.innerText:  獲取得到純文本內容, 不識別標籤

 

   * 標籤.innerHTML: 獲取得到文本內容及標籤(帶標籤的文本內容)

 

     ```javascript

             var box = document.getElementById('box');

             var box1 = document.getElementById('box1');

             console.log(box, box1);

             console.log(box.innerText);

             console.log(box1.innerHTML);

     ```

 

###  2、設置

 

   * 標籤.innerText = 值; 設置時,會覆蓋標籤中原有的內容, 不識別標籤

 

   * 標籤.innerHTML = 值; 設置時, 會覆蓋標籤中原有的內容, 可以識別標籤

 

     ```javascript

             box.innerText = '這是新更改的內容9';

             box.innerText = '<i>這是第二次更新的內容8<i>'; 

     

             box1.innerHTML = '這是新更改的內容7';

             box1.innerHTML = '<strong>這是新更改的內容6</strong>';

     ```

 

3. innerText與innerHTML的區別: innerText不識別標籤, innerHTML可以識別標籤

   ```javascript

    案例:簡易聊天框

   <div>

        <ul id="oul">

            <li>這是第一句話</li>

            <li>這是第二句話</li>

            <li>這是第的句話</li>

        </ul>

    </div>

    <button id="btn">添加內容</button>

    <script>

        // 點擊添加內容,往ul中添加li

        // 1. 獲取元素

        var btn = document.getElementById('btn');

        var oul = document.getElementById('oul');

        // 2. 添加事件

        btn.onclick = function(){

            // 3. 做具體的事情

            // 得到原有的ul中的內容

            var text = oul.innerHTML;

            console.log(text + '<li>這是新內容</li>');

            oul.innerHTML = text + '<li>這是新內容</li>';

        }

    </script>

   ```

## 五、操作表單

 

###  1、獲取

 

> 標籤.value

 

* 注意: option中如果設置了value 得到的就是value, 建議使用value獲取textarea的值

 

  ```javascript

          var userName = document.getElementById('userName');

          var userPassword = document.getElementById('userPassword');

          console.log(userName.value);

          console.log(userPassword.value);

  

          var ck = document.getElementById('ck');

          var ck1 = document.getElementById('ck1');

          console.log(ck.value, ck.checked);

          console.log(ck1.value, ck1.checked);

  

          var man = document.getElementById('man');

          var woman = document.getElementById('woman');

          console.log(man.value, woman.value);

  

          var cs = document.getElementById('cs');

          // 下拉列表中,沒有添加value時, 默認用option中的內容作爲value值

          // 有value時, 返回被選中的option的value值 

          console.log(cs.value);

  

          var txt = document.getElementById('txt');

          console.log(txt.value); // textarea 中內容可以拿到, 建議用

          console.log(txt.innerText); // 空

          console.log(txt.innerHTML); // 可以拿到

  ```

 

### 2、設置

 

>標籤.value = 值;

 

```javascript

          // ----------設置--------

          userName.value = '前端迷';

          userPassword.value = '666666';

  

          txt.value = '這是新的設置內容';

  

         city.value = '重慶'; //匹配不到

         city.value = 'cq'; //所設置的內容要與value值完全一致否則爲空

         city.value = 'cq'; //重設默認選中項

```

 

```javascript

簡易聊天框

    <div id="box">

        <ul id="oul">

            <li>我們已經成爲好友,快開始聊天吧</li>

        </ul>

    </div>

    <input type="text" id="inp"><button id="send">發送</button>

    <script>

        // 輸入內容,點擊發送,到對話框中

        // 1. 獲取元素

        var inp = document.getElementById('inp');

        var send = document.getElementById('send');

        var oul = document.getElementById('oul');

        // 2. 添加事件

        send.onclick = function(){

            // 3. 做具體的事情

            // 3-1: 獲取輸入的內容

            var txt = inp.value;

            console.log(txt);

            var ulHTML = oul.innerHTML;

            // 拼接: 1. 刪 2. 加: 加兩個引號兩個加號 3. 拼

            oul.innerHTML = ulHTML + '<li>' + txt + '</li>';

            // 3-2: 清空輸入框

            inp.value = '';

        }

    </script>

```

## 六、操作元素屬性

 

### 1、獲取

 

  * 元素.屬性名

  * 元素["屬性名"] 元素[變量];

 

### 2、設置

 

  * 元素.屬性名 = "屬性值";

 

  *  元素["屬性名"] = "屬性值";

 

      元素[變量] = "屬性值";

 

* 注意:  class作爲保留字, 不能直接使用, className

 

* 區別: 所有點的方式都可以換成中括號, 中括號中屬性名要加引號, 中括號中可以用變量, 點的方式不能用變量

 

  ```javascript

          var box = document.getElementById('box');

          var btn = document.getElementById('btn');

          btn.onclick = function(){

              console.log(box.className);

              box.id = 'a';

              // class作爲保留字, 不能直接使用, className

              var y = box.className; // box

              box.className = y + ' b';//注意要有空格拼接

  

              var cn = 'id';//將id設爲cn變量

              console.log(box.id);

              console.log(box["id"]);

              console.log(box[cn]);

              // box['id'] = 'c';

              box[cn] = 'c';

          }   

  ```

## 七、操作img的src

 

### 1、獲取

- 標籤.src   注意: 獲取到絕對地址, 沒有實際作用

 

### 2、設置:

- 標籤.src = '值'; 相對地址

 

  ```javascript

          var img = document.getElementById('img');

          console.log(img.src); // file:///E:/%E4%B8%AD%E5%85%AC%E6%95%99%E8%82%B2/20200316/day02/img/dark.jpg

  

          // 點擊開燈按鈕,讓圖片亮起來(換img的src)

          // 1. 獲取元素

          var btn = document.getElementById('btn');

          // 2. 添加事件

          btn.onclick = function(){

              // 3. 具體的事情

              img.src = './img/bright.jpg';

              //img.src = "../images/" + userInput + ".jpg";相對地址

          }

  ```

 

## 八、操作元素樣式

 

### 1、獲取

- 標籤.style.屬性名

### 2、設置

- 標籤.style.屬性名 = '屬性值';

* 注意: 

  * 只能操作行內樣式

  * js中沒有連字符'-', 遇到有連字符, 去掉連字符,將連字符緊跟的第一個字母變成大寫, 遵循駝峯命名法

 

```javascript

        var box = document.getElementById('box');

        console.log(box.style); // 不會直接用

        console.log(box.style.width); // 200px

        console.log(box.style.height);

        console.log(box.style.background);

        console.log(box.style.color); // 空

 

        box.style.width = '500px';

        box.style.border = '10px solid #0f0';

        // 點擊放大按鈕, 將字體放大

        var btn = document.getElementById('btn');

        btn.onclick = function(){

            box.style.fontSize = '100px';// 無連字符,遵循駝峯命名法

        }

```

 

## 九、批量樣式設置: cssText

 

### 1、獲取

- 標籤.style.cssText 只能獲取到行內所設置的樣式

 

### 2、設置

- 標籤.style.cssText = '值';  設置標籤上的style屬性

 

* 設置時, cssText會覆蓋原有的所有行內樣式

 

  ```javascript

          console.log(box.style.cssText);

          box.style.cssText = 'width: 100px; height: 200px; font-size: 10px;';

  ```

```javascript

操作元素案例:輸入序號-顯示對應圖片

    <input type="text" id="inp"> <button id="btn">切換</button>

    <br>

    <img src="./img/1.jpg" alt="" id="myImg">

    <div id="cont">當前顯示的是: img/1.jpg</div>

    <script>

        // 輸入圖片地址, 切換到對應的圖片

        // 用戶輸入圖片名稱, 點擊切換按鈕, 圖片顯示爲用戶所輸入的名字的圖片, 展示的文字對應更改成用戶輸入的名字

        // 1. 獲取元素

        var inp = document.getElementById('inp');

        var btn = document.getElementById('btn');

        var myImg = document.getElementById('myImg');

        var cont = document.getElementById('cont');

        // console.log(inp, btn, myImg, cont);

 

        // 2. 添加事件

        btn.onclick = function(){

            // 3. 具體要做的事情

            // 3-1: 得到用戶所輸入的內容

            var txt = inp.value; // 1 2 3 4

            // 3-2: 切換圖片

            myImg.src = "./img/" + txt + ".jpg";

            // 3-3:文字顯示

            cont.innerHTML = '當前顯示的是: img/' + txt + '.jpg';

            // 3-4: 清除輸入框

            inp.value = '';

        }

    </script>

```

 

## 十、數據類型

 

### 1. 檢驗數據類型

- typeof  要檢驗的數據

- typeof(要檢驗的數據)

- typeof 檢驗結果:

   - 返回自身類型: number\string\boolean\undefined\function

   - 返回object: null\object\array

- 存儲的數據類型和存儲位置

   - 基礎: 存儲數據類型比較單一, 存儲於棧中

   - 複雜: 存儲數據類型比較多樣化, 存儲於堆中

   - 複雜數據類型用=賦值,改變的是地址指針


 

### 2、分類

 

- 基礎數據類型: number\string\boolean\null\undefined

 

- 複雜數據類型: (引用、複合)object\array\function

 

#### number

 

- 整型: 0 1 2 3 整數

 

- 浮點型: 小數, 必須包含一個小數點並且小數點後之少一位不爲0的數字 1.2 2.01

 

- 特殊值:  

   -  如果數字以0開頭,並且後面的數字都不超過8,就表示八進制數  

   -  如果數字以0x開頭,表示十六進制數 0-9ab-f 

   -  正無窮大:Infinity/-Infinity(100/0,除數爲0) 

   -  NaN: 特殊值, Not a Number, 不是一個數字, 任何與數值操作錯誤的時候都會返回NaN

      - 檢驗: 使用typeof之後,返回結果是number

      - NaN與所有數值進行計算,返回結果都是NaN

      - NaN與任何數值都不相等,包括自身

```

注意: 由於計算機存儲不精的問題,導致計算結果有偏差, 在使用的過程中要避免使用小數去做判斷

 

 console.log(0.1 + 0.2); // 0.30000000000000004

```

 

#### string

 

1. 概念: 字符串, 被成對的單雙引號包裹起來的字符都是字符串

 

```javascript

        var str = 'abc';

        console.log(typeof str); // string

        var str1 = '123';

        console.log(typeof str1); // string

```

 

2. 字符串的長度: 字符串.length

3. 獲取到指定下標的字符: 

   * 字符串.charAt(下標);

   * 字符串[下標]: ie8以上可以使用

   * 下標: 從左往右、從0開始的數字



 

#### boolean

 

1.  boolean: 布爾值, true(真) false(假)

 

2. 一般用來做判斷條件或者是判斷條件的結果

 

   ```javascript

           var b = true;

           console.log(b);

           console.log(typeof b); // boolean

           console.log(1 == 1); // true

           if(true){//如果爲真就執行

               console.log(1);//1

           }

   ```



 

#### null與undefined

 

1. undefined: 聲明瞭變量未賦值時(未初始化)

 

2. null: 空, 空對象, 現在沒有值,但是將來可能會給他一個值

 

3. js中規定: null和undefined相等

 

4. null和undefined的區別:  undefined是聲明瞭未賦值, null本身就是空

 

   ```javascript

           var a;

           console.log(a);

   

           var b = undefined;

           console.log(typeof b); // undefined

   

           var nu = null;

           console.log(nu);

           console.log(typeof nu); // object

   

           console.log(1 == undefined); // false

           console.log(undefined == undefined); // true

           console.log(null == null);//true

           // js中規定: null和undefined相等

           console.log(null == undefined); // true

   ```



 

### 複雜數據類型

 

#### object

 

1. 概念: 對象, 對象是由方法和屬性組成的, 一切皆對象, 所有的一切都是對象

 

2. 例子: window\document\元素 {} 

 

   ```javascript

           console.log(typeof window); // object

           console.log(document);

           console.log(typeof document); // object

           var box = document.getElementById('box');

           console.log(typeof box); // object

           var obj = {};

           console.log(obj); // 空對象

   ```

 

3. 創建: var 變量名 = {

 

   ​    'key': 'value',

 

   ​    'key1': 'value1'

 

   }

 

   ```javascript

           var myObj = {

               'name': '彭于晏',

               'height': '183cm'

           }

           console.log(myObj);

   ```

 

4. 取值: 對象變量名.key 對象變量名['key'] 對象變量名[變量]

 

   ```javascript

           console.log(myObj.name);//彭于晏

           console.log(myObj['name']);

           var h = 'height';

           console.log(myObj[h]);//183cm

   ```




 

#### array

 

1. array: 數組, 存放數據的容器, 用來存放不定數量、不定類型的數據

 

   ​        值得有序集合;

 

   索引: 每一個值的下標

 

   元素: 數組中的每一項

 

2. 創建: var 變量名 = [元素1, 元素2, ...., 元素n];

 

3. 數組的長度: 數組.length

 

4. 得到指定下標的元素: 數組[下標]

 

   ```javascript

           var arr = [];

           console.log(arr);//Array(0)[]

   

           var arr1 = [1, 2, 3];

           console.log(arr1);

   

           var arr2 = [1, true, null, 0xa7, 060, 'abc', 1.2, undefined, NaN, {}, 1/0, box, [1,2,3]];

           console.log(arr2);

           console.log(arr2.length);

           console.log(arr2[3]); // 167 0xa7

           console.log(typeof arr2); // object

   ```



 

#### function 

 

1. function: 函數, 存放一段代碼, 在有需要的時候調用

 

2. 函數使用: 

 

   * 聲明函數: function 函數名(){ // 要執行的代碼塊 }

 

   * 調用: 函數名();

 

   * 注意: 只聲明不調用函數不起作用

 

   * 函數名的命名規則遵循變量的命名規則

 

     ```javascript

             function today(){

                 console.log('啊,要上課');

             }

             today();

             today();

             today();

             today();

             today();

             today();

             today();

     ```






 

### 3、強制轉換

 

#### Number

 

* Number(要轉換的數據): 將數據強制轉換成number類型

* 可以轉換: 

  * 純數字字符串\空和空格\Boolean\null

  * array: 空數組、只有一項且爲數字、數字字符串、空字符串、boolean、null可以轉換

 

```javascript

        // string: 純數字字符串\空和空格

        console.log(Number('')); // 0

        console.log(Number(' ')); // 0

        console.log(Number('a')); // NaN

        console.log(Number('123a')); // NaN

        console.log(Number('123')); // 123

        console.log(Number('12.5')); // 12.5

 

        // boolean: true(1)  false(0)

        console.log(Number(true)); // 1

        console.log(Number(false)); // 0

 

        // null(0) undefined

        console.log(Number(null)); // 0

        console.log(Number(undefined)); // NaN

 

        var obj = {};

        console.log(Number(obj)); // NaN

 

        // array: 空數組、只有一項且爲數字、數字字符串、空字符串、boolean、null可以轉換

        var arr = [];

        console.log(Number(arr)); // 0

        

        console.log(Number(['123'])); // 123

        console.log(Number([null])); // 0

        console.log(Number(['123', '456'])); // NaN

```



 

#### parseInt

 

1. parseInt(要轉換的數據, 進制)

 

2. 從左往右依次轉換, 遇到不能轉換的就停止, 返回整型(整數); 如果第一個字符就不能轉換, 返回NaN

 

3. 進制: 2-36進制, 得到對應進制字符串

 

   注意: 進制不是必須寫,但是建議寫

 

   ```javascript

           console.log(parseInt('300px')); // 300

           console.log(parseInt('12.5px')); // 12

           console.log(parseInt('070')); // 在ie8及以下,以0爲開頭的會轉換成8進制數

           console.log(parseInt('070', 10));

           console.log(parseInt('110', 8));

           console.log(parseInt('a123')); // NaN

   ```

 

#### parseFloat

 

1. parseFloat(要轉換的數據): 轉換規則與parseInt一致, 返回可以是浮點數

 

   ```javascript

           console.log(parseFloat('300px')); // 300

           console.log(parseFloat('12.5px')); // 12.5

           console.log(parseFloat('12.0px')); // 12

   ```

 

#### isNaN

 

1. isNaN(要判斷的數據): 判斷數據 是不是 不是一個數字

 

2. 不是一個數字: true    是一個數字: false

 

   ```javascript

           console.log(isNaN(123)); // false

           console.log(isNaN('123')); // false

           console.log(isNaN('a123')); // true

           console.log(isNaN('123a')); // true

           // Number('123a')---> NaN--true   數字---false

           console.log(isNaN('12.5')); // false

           console.log(isNaN('12.5px')); // true

           // Number(true); 1

           console.log(isNaN(true)); // false

           console.log(isNaN(null)); // false 

           console.log(isNaN(undefined)); // true

           console.log(isNaN({})); // true

           console.log(isNaN([])); // false

           console.log(isNaN([null])); // false

   ```

 

   

 

### 強制轉換

 

##### string

 

1. 數據對象.toString(進制): 

 

   * toString方法是屬於要轉換的對象的自帶方法, 可以被改變

 

   * null與undefined不支持

 

   * 進制, 轉換後得到轉換的數據對應的進制字符串, 2-36進制

 

     ```javascript

             // number

             var num = 30;

             console.log(num.toString());

             console.log(typeof num.toString()); // string

     

             // boolean

             var t = true;

             console.log(t.toString());

             console.log(typeof t.toString()); // string

     

             // null 與 undefined: null 是空對象,本身就是空  undefined是聲明未賦值

             var n = null;

             // console.log(n.toString());

             // console.log(undefined.toString());

     

             var obj = {};

             console.log(obj.toString()); // [object Object]

     

             var arr = [];

             console.log(arr.toString()); // 空字符

             var arr1 = [1,2,3];

             console.log(arr1.toString()); // 1,2,3

     

             // 進制, 轉換後得到轉換的數據對應的進制字符串, 2-36進制

             var num = 10;

             console.log(num.toString(2));

             console.log(typeof num.toString(2)); // string

     ```

 

2. String(要轉換的數據): 強制轉換

 

   ```javascript

           console.log(String(null));

           console.log(typeof String(null)); // string

           console.log(String(undefined)); // undefined

           console.log(String(arr1)); // 1,2,3

   ```



 

#### Boolean

 

1. Boolean(要轉換的數據): 強制轉換

 

2. js中的真真假假: 

 

   ​        假: 空字符 0 NaN null undefined false

 

   ​        真: 除了以上6個,剩下都是真的

 

3. ```javascript

           // string

           console.log(Boolean('')); // false

           console.log(Boolean(' ')); // true

           console.log(Boolean('a')); // true

           console.log(Boolean('0')); // true

            

           // number

           console.log(Boolean(0)); // false

           console.log(Boolean(10)); // true

           console.log(Boolean(-1)); // true

           console.log(Boolean(0.25)); // true

           console.log(Boolean(NaN)); // false

            

           // null與undefined

           console.log(Boolean(null)); // false

           console.log(Boolean(undefined)); // false

            

           // 複雜

           var obj = {};

           console.log(obj);

           console.log(Boolean(obj)); // true

            

           var arr = [];

           console.log(arr);

           console.log(Boolean(arr)); // true

            

           function a(){

               console.log(1);

           }

           console.log(Boolean(a));

   ```

 

   

 

4. ```javascript

           // string

           console.log(Boolean('')); // false

           console.log(Boolean(' ')); // true

           console.log(Boolean('a')); // true

           console.log(Boolean('0')); // true

            

           // number

           console.log(Boolean(0)); // false

           console.log(Boolean(10)); // true

           console.log(Boolean(-1)); // true

           console.log(Boolean(0.25)); // true

           console.log(Boolean(NaN)); // false

            

           // null與undefined

           console.log(Boolean(null)); // false

           console.log(Boolean(undefined)); // false

            

           // 複雜

           var obj = {};

           console.log(obj);

           console.log(Boolean(obj)); // true

            

           var arr = [];

           console.log(arr);

           console.log(Boolean(arr)); // true

            

           function a(){

               console.log(1);

           }

           console.log(Boolean(a));// true

   ```




 

## 十一、運算符

 

### 1、分類

 

1. 算術運算符: + - * / %(取餘) ++ --

 

2. 賦值運算符: = += -= *= /= %=

 

3. 比較運算符: > >= < <= ==(雙等) ===(恆等\全等) !=(不等) !==(不全等)

 

4. 邏輯運算符: &&(與) ||(或) !(非,取反)

 

5. 三目運算符: 三元, 判斷的條件 ? 條件成立時, 執行的代碼 : 條件不成立時, 執行的代碼



 

##### 算術運算符

 

* +: 計算中,如果有一邊爲string, 那麼做拼接; 其他數據類型, 儘可能的用Number轉換後在做計算

 

* \- * / %: 儘可能的使用Number轉換後在做計算

 

* 複雜數據類型在做計算的時候, 先使用toString方法轉換成字符串之後在做計算

 

  ```javascript

          console.log('abc' + '123'); // abc123

          console.log('abc' + 123); // abc123

          console.log(123 + true); // 123 + 1  124

          console.log(123 + null); // 123 + 0  123

          console.log(null + undefined); // 0 + NaN  NaN

          console.log('123' + {}); // 123[object Object]

          console.log(123 + [1,2,3]); // 123 + '1,2,3' '1231,2,3'

          console.log(123 + []); // 123

  

          // - * / %: 儘可能的使用Number轉換後在做計算

          // -:

          console.log('abc' - '123'); //  NaN - 123  NaN

          console.log(123 - true); // 122

          console.log(null - undefined); // NaN

          console.log({} - false); // NaN

          console.log([] - null); // 0

          console.log(true - []); // 1

  

          // *:

          console.log('abc' * null); // NaN

          console.log(123 * undefined); // NaN

          console.log(true * false); // 0

          console.log({} * '123'); // NaN * 123 NaN

          console.log(['2'] * true); // 2

          console.log(['2', '3'] * false); // NaN

  

          // /:

          console.log('123' / false); // 123 / 0  Infinity

          console.log('-123' / null); // -Infinity

          console.log(null / undefined); // NaN

          console.log(true / [1]); // 1

  

          // %: 取餘: 餘數(除不盡剩下的那個數)

          console.log(10 % 3); // 1

          console.log(10 % 2); // 0

          console.log(true % false); // 1 % 0 NaN

          console.log(null % true); // 0 % 1  0

          console.log([5] % '2') // 5 % 2 1

  ```



 

#### ++與--

 

* ++(在自身基礎上+1) --(在自身基礎上-1)

* ++/--在前: 先自加/減再運算(賦值/輸出)

* ++/--在後: 先做運算(賦值或輸出), 在做自加/減

 

```javascript

        var num = 10;

        // num++;

        // num = num + 1;

        // num = num - 1; 

        // num--;

        // ++num;

        console.log(num);

 

        // ++/--在前: 先自加/減再運算(賦值/輸出)

        // var m = ++num; // ++num --> 11

        // console.log(m); // 11

        // console.log(num); // 11

 

        // console.log(++num); // 11

        // console.log(num);  // 11

 

        // ++/--在後: 先做賦值或輸出, 在做自加/減

        // var m = num++;

        // console.log(m); // m = num; m = 10; num++; num-->11

        // console.log(num); // 11

 

        // console.log(num++);// 輸出num-->10  num++; num--->11

        // console.log(num); // 11

 

        // console.log(--num); // 9

        // console.log(num); // 9

 

        console.log(num--); // 10

        console.log(num); // 9

```

 

#### 賦值運算符:  =(賦值) += -= *= /= %=

 

```javascript

        var num = 10;

 

        // +=: 

        var num1 = 10;

        num += 30;

        // num = num + 30;

        console.log(num);

 

        // -=:

        var num2 = 10;

        num2 -= 2;

        console.log(num2); // 8

 

        // *=:

        var num3 = 10;

        num3 *= 10;

        console.log(num3); // 100

 

        // /=:

        var num4 = 20;

        num4 /= 2;

        console.log(num4); // 10

 

        // %=:

        var num5 = 10;

        num5 %= 2;

        console.log(num5); // 0

 

        var n = 30;

        n += 'a';

        // n = n + 'a';

        console.log(n); // 30a

 

        var m = true;

        m /= 1;

        console.log(m); // 1

```



 

#### 比較運算符

 

* < <= > >= == === != !==

 

* 返回結果是個布爾值, 比較的判斷成立返回true 不成立返回false

 

* 字符串比較中, 從左到右依次比較每個字符的ASCII值, 如果有一位已經比較出來大小,那就結束比較

 

* ==: 雙等: 只比較值

 

  ===: 三等\全等\恆等: 不僅比較值,還比較數據類型

 

* !=: 只比較值

 

  !==: 不僅比較值,還比較數據類型

 

  ```javascript

          // 返回結果是個布爾值

          // 比較的判斷成立返回true 不成立返回false

          console.log(1 > 2); // false

          console.log(2 < 3); // true

  

          console.log('1' < '2'); // true  49 < 50

          console.log('10000' < '2'); // true

          // 字符串比較中, 從左到右依次比較每個字符的ASCII值, 如果有一位已經比較出來大小,那就結束比較

          // 0 ----> 48

          // A ----> 65

          // a ----> 97

          console.log('a' > 'A'); // 97 > 65 true

          console.log('22221' < '2'); // false

  

          console.log(true > false); // 1 > 0

          console.log('a' > undefined); // false NaN > NaN

          console.log('a' < undefined); // false

          console.log('a' < 'undefined'); // true

          console.log({} > []); // '[object Object]' > ''  true

  

          console.log(1 >= 1); // 1 > 1 或 1 == 1 true

  

          // ==: 雙等: 只比較值

          // ===: 三等\全等\恆等: 不僅比較值,還比較數據類型

          console.log('1' == 1); // true

          console.log('1' === 1); // false

  

          // !=: 只比較值

          // !==: 不僅比較值,還比較數據類型

          console.log('1' != 1); // false

          console.log('1' !== 1); // true

  ```



 

#### 邏輯運算符

 

* &&(與): 左右兩邊各爲一個條件, 如果兩邊均爲true, 返回true, 如果有一邊爲false則返回false 

 

* ||(或): 左右兩邊各爲一個條件,如果有一個條件爲true, 返回true, 如果兩個都是false, 會false

 

* !(非\取反): 布爾, Boolean, true-->取反---> false

 

  ```javascript

          console.log(3 > 2 > 1); // false

          console.log(3 > 2 && 2 > 1); // true && true  true

          console.log(3 < 2 && 2 > 1); // false && true false

  

          console.log(3 > 2 || 2 > 1); // true

          console.log(3 < 2 || 2 > 1); // false || true  true

          console.log(3 < 2 || 2 < 1); // false || false false

  

          // js爲假: false '' null undefined 0 NaN

          console.log(!''); // true

          console.log(!' '); // false

          console.log(!0); // true

          console.log(!{}); // false

  

          console.log(!!false); // !false ---> true  !true --- > false

  ```



 

#### 三目運算符

 

* 條件 ? 條件成立, 執行的代碼 : 條件不成立, 執行的代碼

 

  ```javascript

          var num = 10;

          // num > 10 ? alert(1) : alert(2);

          

          var a;

          // num < 30 ? a = 30 : a = 10;

          // console.log(a); // 30

  

          a = num < 30 ? 30 : 20;

          console.log(a); // 30

  ```

 

  

 

### 2、隱式轉換規則

 

* +: 計算中,如果有一邊爲string, 那麼做拼接; 其他數據類型, 儘可能的用Number轉換後在做計算

 

* \- * / %: 儘可能的使用Number轉換後在做計算

 

* 複雜數據類型在做計算的時候, 先使用toString方法轉換成字符串之後在做計算





 

## 十二、條件語句

 

### 1、流程控制語句分類: 控制代碼的執行順序的語句

 

* 順序結構: 按照順序執行代碼

* 條件選擇結構(分支): if\ if else\switch

* 循環結構: 將代碼執行特定次數的語句, for\while\do while

* 其他語句: break\continue



 

### 2、條件選擇結構

 

if: if(條件) { // 條件爲真(成立)時, 執行的代碼}

 

if else: if(條件) { // 條件爲真(成立)時, 執行的代碼} else { // 條件爲假(不成立)時, 所執行的代碼 }

 

if else多層嵌套: 

 

​        if(條件1){

 

​          // 條件1成立的時候,執行的代碼

 

​        } else if(條件2){

 

​          // 條件2成立的時候, 執行的代碼 

 

​        } else {

 

​          // 以上條件都不成立的時候, 所執行的代碼

 

​        }

 

```javascript

        var m = 0;

        // 適用於單一代碼代碼

        // m > 60 ? alert('合格') : alert('不合格');

        if(m > 60){

            console.log('你可太優秀了');

            alert('合格');

        } else{

            // 條件不成立

            console.log('我們繼續加油');

            alert('不合格');

        }

 

        // 60及以下: 不合格   61 - 80: 中等  81 - 90: 良好  91 - 100: 優秀

        var mark = 73;

        if(mark <= 60){

            console.log('不合格, 繼續加油');

        } else if(mark > 60 && mark <= 80){

            console.log('中等, 在拼一下');

        } else if(mark > 80 && mark <= 90){

            console.log('良好, 在努力一下你就是優秀了');

        } else {

            console.log('非常優秀, 繼續保持');

        }

```

 

* 注意:if後的{}可以省略的, 如果省略了, 只能控制後面的第一條語句

 

  ```javascript

          // if後的{}可以省略的, 如果省略了, 只能控制後面的第一條語句

          var a = 10;

          if(a > 10){

              console.log(1);

              console.log(2);

          }

  

          if(a > 10) 

          console.log(1);

          console.log(2);

  ```

  ```javascript

    案例:複選框的反選  

    <input type="checkbox" name="" id="inp" >

    <button id="btn">反選</button>

    <script>

        // 點擊btn, 將input從選中變成不選中, 從不選中變成選中

        // 1. 獲取元素

        var btn = document.getElementById('btn');

        var inp = document.getElementById('inp');

        // console.log(inp, btn);

        // 2. 添加事件

        btn.onclick = function(){

            // 3. 具體要做的事情

            console.log(inp.checked); // 選中爲true, 不選中爲false

            // true ----> false   false ---> true

            inp.checked = !inp.checked;

            

            // if(inp.checked){

            //     inp.checked = false;

            // } else {

            //     inp.checked = true;

            // }

        }

    </script>

  ```

 

  



 

### 3、switch

 

1. 適用於條件結果比較明確並且單一的時候

 

2. 語法: 

 

   switch(要判斷的數據/ 條件){

 

   ​        case 結果1: 

 

   ​          符合結果1時, 所執行的代碼;

 

   ​          break;

 

   ​        case 結果2:

 

   ​          符合結果2時, 所執行的代碼;

 

   ​          break;

 

   ​          .....(可以有很多個結果)

 

   ​        default:

 

   ​          以上結果都不符合的時候, 所執行的代碼;

 

   ​          break;

 

   ​      }

 

3. 注意事項: break: 是防止穿透; 不加break, case匹配到一個之後, 後面的結果都不會進行匹配, 直接執行;

 

   ```javascript

            /* 

            90以上: A  80以上: B  70以上: C 其他: D

        */

        var core = 78;

        // 找出如何是單一條件

        var p = parseInt(core / 10);

        switch (p) {

            case 10:

                console.log('A+');

                break;

            case 9:

                console.log('A');

                break;

            case 8:

                console.log('B');

                break;

            case 7:

                console.log('C');

                break;

            default:

                console.log('D');

                break;

        }

 

   ```



 

## 十三、獲取元素的方式

 

###  1、標籤名獲取

 

​   1. document.getElementsByTagName('標籤名'); 獲取文檔中的所有的標籤

 

​    2. 父元素.getElementsByTagName('標籤名'); 獲取對應的父元素中的標籤

 

​      標籤名不區分大小寫

 

### 2、類名獲取

 

1. document.getElementsByClassName('類名'); 獲取文檔中的所有此類名的標籤

2. 父元素.getElementsByClassName('類名'); 獲取對應的父元素中的類名標籤

 

```javascript

        var lis = document.getElementsByTagName('li');

        console.log(lis);

        console.log(lis[0]);

 

        var uls = document.getElementsByTagName('ul');

        console.log(uls[1]);

        var lis2 = uls[1].getElementsByTagName('li');

        console.log(lis2);

 

        var boxs = document.getElementsByClassName('box');

        console.log(boxs);

 

        // 第一個ul中的類名爲box的元素

        var box1 = uls[0].getElementsByClassName('box');

        console.log(box1);

```



 

* 注意: 返回一個集合

* 集合: 類數組, 有索引有元素, 但是不能使用數組的方法

* 通過下標獲取到對應的下標的元素

 

### 3、tagName/className與id獲取的區別:

 

​     a. id只能通過document獲取, tagName/className可以是document也可以是父元素;

 

​      b. id直接獲取到元素, tagName/className獲取到的是一個集合

 

​      c. 操作方式不同, id可以直接操作, tagName/className需要通過下標取出元素後再操作

 

​      d. 通過tagName/className獲取的元素具有動態性, 先獲取, 後添加, 元素也可以找得到, id不可以

 

​      e. 特殊點: className在ie8以上才支持

 

```javascript

        var box = document.getElementById('box');

        var lis = document.getElementsByTagName('li');

        console.log(box, lis);

 

        var ul = document.getElementsByTagName('ul')[0];

        ul.innerHTML += '<li id="box">12345</li>';

        console.log(lis);

        console.log(box);

 

        var four = document.getElementsByClassName('four'); // ie8報錯

        console.log(four);

```



 

## 十四、循環

 

### 1、for

 

1. 語法:

 

   for(表達語句一; 表達語句二; 表達語句三){

 

   ​        // 每次循環要執行的代碼

 

   }

 

   for(1 初始化循環變量; 2 循環結束的條件; 4 更新循環變量){

 

   ​        // 3 循環體

 

   }

 

2. 執行順序: 

 

   1. 初始化循環變量: var i = 0;

   2. 循環判斷: i < 5 ? 是符合條件, 執行第三步: 不符合條件, 終止循環

   3. 循環體執行

   4. 更新循環變量: i++;

   5. 回到第二步

 

3. 注意: 必須要有一個可以讓循環結束的條件, 否則就會造成死循環

 

   ```javascript

           for(var i = 0; i < 5; i++){

               console.log(i);

           }

   ```



 

### 2、for 變種

 

1. 初始化變量: var i = 0;

 

   for(;2.循環結束的條件;){

 

​          // 3.循環體

 

​          // 4.變量更新

 

​        }

 

注意: 兩個分號不能省略

 

```javascript

        var sum = 0;

        var i = 1;

        for(; i <= 100;){

            sum += i;

            i++;

        }

        console.log(sum);

```


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章