1. 程式人生 > 實用技巧 >第五模組 WEB開發基礎之JavaScript

第五模組 WEB開發基礎之JavaScript

1. JavaScript介紹

  ECMAScript是一種語言標準, JavaScript是對ECMAScript的一種實現.

  可以將ECMAScript看作JavaScript.

  現在, 大部分瀏覽器上執行的是2011年(ES5)和2015年(ES6)釋出的版本.

  主要學習ES5, 然後完善補充ES6.

  

2. 如何在網頁中插入JavaScript

<!DOCTYPE html>
<html>
<head>
    <title>js檔案的引入</title>
    <!-- 方式一(內部js): 
    通過script引入, 可以放在head標籤中, 
    也可以放在body標籤中,也可以放在外面, 
    只要它在當前的整個文件中就行. 
--> <script type="text/javascript"> <!-- 編寫js程式碼 --> </script> <!-- 方式二(外接js): 通常在開發專案中使用 --> <script type="text/javascript" src="js/index.js"></script> </head> <body> </body> </html>

3. 變數

<!DOCTYPE html>
<html>
<head>
    <title>變數</title>
</head>
<body>
    <script type="
text/javascript"> //單行註釋, 快捷鍵: ctrl+? /* 多行註釋: 快捷鍵: ctrl+shift+? */ // 方式一: // 變數初始化 var x = 30; var name = '王思聰'; // 方式二: // 宣告變數: var y; // 變數賦值: y = 50; /* 規則: 1. 必須使用字母, 下劃線(_), $開始;
2. 多個英文字母, 通常採用駝峰體; 3. 不能使用js中的關鍵字和保留字來進行命名; 4. 嚴格區分大小寫; 5. 可以對變數進行重新賦值; */ </script> </body> </html>

4. 基本變數型別

<!DOCTYPE html>
<html>
<head>
    <title>
        基本變數型別
    </title>
</head>
<body>
    <script type="text/javascript">
        // 變數型別
        // 基本的資料型別
        // number, string, boolean, undefined, null
        // 引用的資料型別
        // object, array, function
        // 小數,整數,正數和負數都屬於number型別
         var a = 3;
         var b = 1.23;
         var c = -1;
         // typeof來檢查當前變數的資料型別
         alert(typeof a);
         alert(typeof b);
         alert(typeof c);
         // 字串  'abc123' "cds78"
         // boolean 0(假 false) 1(真 true)
         var c = 3 < 4;
         alert(c);
         alert(typeof c);
         // undefined
         // 聲明瞭變數, 但是未賦值, 就是undefined.
         var x;
         // null
         var y = null;
    </script>
</body>
</html>

5. 算數運算子

<!DOCTYPE html>
<html>
<head>
    <title>運算子-算數運算子</title>
</head>
<body>
    <script type="text/javascript">
        var x = 10;
        var y = 4;
        var sum = x + y;
        var en = x - y;
        var or = x * y;
        var ll = x / y;
        // 取餘
        var op = x % y;
    </script>
</body>
</html>

6. 賦值運算子

<!DOCTYPE html>
<html>
<head>
    <title>運算子-遞增,遞減,賦值運算子</title>
</head>
<body>
    <script type="text/javascript">
        // ++
        // --
        var x = 10;
        x++;
        alert(x);
        // 賦值運算子
        var a = 4;
        var b = 5;
        a = b;
        var c = 10;
        c = c + 5;
        c += 5;
        c -= 5;
        c *= 5;
        c /= 5;
    </script>
</body>
</html>

7. 字串

<!DOCTYPE html>
<html>
<head>
    <title>字串</title>
</head>
<body>
    <script type="text/javascript">
        // 注意字串的巢狀問題
        // 可以加\進行轉譯
        var str = "I'm \"MJJ\"";
        // 字串的拼接
        var one = "hello";
        var two = "world";
        var both = one + " " + two;
    </script>
</body>
</html>

8. 數字和字串轉換

<!DOCTYPE html>
<html>
<head>
    <title>數字和字串轉換</title>
</head>
<body>
    <script type="text/javascript">
        // 隱式轉換: 數值轉為字串
        /*當字串和數字相加時, 不會報錯, 會自動將數字轉化為字串.*/
        var a = "mjj" + 521;
        // 結果: mjj520, 型別是string

        // 字串轉數字
        var num = "" + 234;
        var nNum = Number(num);
        alert(typeof nNum);
        
        // 數字轉字串
        var nnNum = num.toString();

        //注意: '2323fff'不能轉化為數字. 
        //雖然用Number()轉化後得到number型別的資料, 但結果為NaN(not a number).

    </script>
</body>
</html>

9. 陣列

<!DOCTYPE html>
<html>
<head>
    <title>陣列array</title>
</head>
<body>
    <script type="text/javascript">
        // 1. 建立
        var shopping = ['香蕉','蘋果','橘子']
        // 型別是object. array屬於object.
        // array中可以存放各種型別的資料. 存在索引: 0, 1, 2...

        //檢查>>>console中可以列印結果
        // console.log(shopping);

        // 2. 訪問
        var lst = ['tree', 1, 5, 'good'];
        var item1 = lst[0];
        console.log(item1);

        // 3. 修改
        lst[0] = '大樹';

        // 4. 訪問陣列的長度
        console.log("陣列的長度是:" + lst.length);
    </script>
</body>
</html>

10. 條件

<!DOCTYPE html>
<html>
<head>
    <title>條件判斷</title>
</head>
<body>
    <script type="text/javascript">
        if(true){
            do onething
        }
        else{
            do another thing
        }
    </script>
</body>
</html>

11. if...else...語句

<!DOCTYPE html>
<html>
<head>
    <title>if...else...</title>
</head>
<body>
    <script type="text/javascript">
        //單條件
        var distance = 10;
        var nowDistance = 5
        if (nowDistance <= distance){
            console.log("自動駕駛");
        }else{
            console.log("人為駕駛");
        }

        //多條件
        var weather = "snow";
        if (weather === "sunny"){
            console.log('出去玩');
        }else if (weather === "rain"){
            console.log("呆在家裡");
        }else if (weather==="snow"){
            console.log('滑雪');
        }else{
            console.log("輸入的天氣有錯");
        }
    </script>
</body>
</html>

12. 邏輯運算子

<!DOCTYPE html>
<html>
<head>
    <title>比較運算子</title>
</head>
<body>
    <script type="text/javascript">
        // === 和 !==
        // === 同時比較值和資料型別
        // == 和 !=
        // == 僅比較數值
        // 推薦使用 ===
        // > < >= <=
    </script>
</body>
</html>

13. 邏輯運算子

<!DOCTYPE html>
<html>
<head>
    <title>邏輯運算子</title>
</head>
<body>
    <script type="text/javascript">
        var weather = "sunny";
        var temp = 32;
        if (weather === "sunny" && temp > 30){
            console.log("在家吹空調, 吃西瓜.")
        }
        // 邏輯運算子: &&(and)  //(or)  !(not)
        
    </script>
</body>
</html>

14. switch語句

<!DOCTYPE html>
<html>
<head>
    <title>switch語句</title>
</head>
<body>
    <script type="text/javascript">
        // 在多個條件進行判斷時建議使用switch語句.
        // switch後的變數與case後的值進行匹配, 匹配成功後執行後面的程式碼.
        // 如果沒有寫break, 則會繼續執行後面的程式碼.
        var weather = "sunny";
        switch(weather){
            case 'sunny':
                alert(1);
                break;
            case 'rain':
                alert(2);
                break;
            default:
                alert(3);
                break;
        }

    </script>
</body>
</html>

15. 三元運算子

<!DOCTYPE html>
<html>
<head>
    <title>三元運算子</title>
</head>
<body>
    <script type="text/javascript">
        // if...else...
        /*if(true){
            ...
        }else{
            ...
        }*/
        // 以上程式碼比較繁瑣, 可以使用三元運算進行簡化
        // 條件 ? run this code : run another code;
        var result = 1>2 ? '真的':'假的';
        console.log(result);
    </script>
</body>
</html>

16. for迴圈介紹和應用

<!DOCTYPE html>
<html>
<head>
    <title>for迴圈</title>
</head>
<body>
    <script type="text/javascript">
        /*for(初始化條件;結束的條件;遞增的條件){
            run code
        }*/
        var i;
        var sum = 0;
        for(i = 1; i <= 10000; i++){
            sum += i;
        }
        console.log(sum);

        var shopping = ['香蕉', '蘋果', '牛奶']
        var j;
        for(j=0;j<shopping.length;j++){
            var str = '<h1>' + shopping[j] +'</h1>';
            document.write(str);
        }
    </script>
</body>
</html>

17. break和continue

<!DOCTYPE html>
<html>
<head>
    <title>break和continue語句</title>
</head>
<body>
    <script type="text/javascript">
        //break可以跳出當前迴圈
        var x = 0;
        for(;;){
            if(x > 100){
                break;
            }
            x++;
        }
        // continue 跳出當前迴圈, 下次迴圈繼續執行.
        var sum = 0;
        for(var i = 1;i <= 10; i++){
            if(i === 8){
                continue;
            }
            sum += i;
        }
    </script>
</body>
</html>

18. while迴圈

<!DOCTYPE html>
<html>
<head>
    <title>while迴圈</title>
</head>
<body>
    <script type="text/javascript">
        /*初始化條件
        while(判斷迴圈結束條件){
            run code
            遞增條件
        }*/
        var i = 1;
        var sum = 0;
        while(i < 100){
            sum += i;
            i += 2;
        }
        document.write(sum);
    </script>
</body>
</html>

19. do-while

<!DOCTYPE html>
<html>
<head>
    <title>do-while迴圈</title>
</head>
<body>
    <script type="text/javascript">
        //先執行後判斷
        var sum = 0;
        var i = 1;
        do{
            sum += i;
            i++;
        }while(i <= 100);
    </script>
</body>
</html>

20. 函式的定義

<!DOCTYPE html>
<html>
<head>
    <title>函式的定義</title>
</head>
<body>
    <script type="text/javascript">
        // 函式: 封裝程式碼, 解決反覆重複的問題
        function f(){
            xxx;
            xxx;
            xxx;
        }
        f();
    </script>
</body>
</html>

21. 函式傳參

<!DOCTYPE html>
<html>
<head>
    <title>函式傳參</title>
</head>
<body>
    <script type="text/javascript">
        // 函式: 封裝程式碼, 解決反覆重複的問題
        function f(引數1, 引數2, 引數3){
            xxx;
            xxx;
            xxx;
        }
        f(引數1, 引數2, 引數3);
        // 如果不傳引數, 則引數就是undefinded.
    </script>
</body>
</html>

22. 函式返回值和函式表示式

<!DOCTYPE html>
<html>
<head>
    <title>函式返回值</title>
</head>
<body>
    <script type="text/javascript">
        function addition(a,b){
            var sum = a + b;
            return sum;
        }
        var sum = addition(3,2);
        console.log(sum);
    </script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title>函式表示式</title>
</head>
<body>
    <script type="text/javascript">
        var division = function(a, b){
            return a / b;
        }
        var result = division(6,2);
        console.log(result);
    </script>
</body>
</html>

23. 函式作用域和全域性汙染

<!DOCTYPE html>
<html>
<head>
    <title>函式作用域</title>
</head>
<body>
    <script type="text/javascript">
        // 定義在函式外部的變數稱為全域性作用域
        // 定義在函式內部的變數稱為區域性作用域
        var a = 1;
        console.log(a);
        function add(){
            var b = 3;
            console.log(a);
        }
        add();
    </script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title>全域性汙染</title>
</head>
<body>
    <script type="text/javascript" src="js/first.js"></script>
    <script type="text/javascript" src="js/second.js"></script>
    <script type="text/javascript">
    /*first.js或second.js中的程式碼如下:
    var name = "mjj";
    function hello(){
        alert("hello " + name);
    }*/
        hello();
    // 如果引入的兩個js中, 同時存在相同的函式, 且使用相同的全域性變數, 後面的會覆蓋掉前面的, 則會導致全域性汙染.

    // 為了防止出現全域性汙染的問題, 則應在函式內部定義變數.
    (function(){
        var name = "mjj";
        var hello = function(){
            alert("hello" + name);
        }
    })
    // 這種情況下, hello是區域性變數, 如果在全域性呼叫的話, 則呼叫不到, 如果想進行呼叫, 則需要使用以下方法:
    (function(){
        var name = 'mjj';
        var hello = function(){
            alert ("hello" + name);
        }
        window.first = hello;
    })
    // 呼叫方式如下:
    first();
    </script>
</body>
</html>

24. 物件object講解

<!DOCTYPE html>
<html>
<head>
    <title>object</title>
</head>
<body>
    <script type="text/javascript">
    // 萬事萬物皆物件(屬性和方法)
    // 字面量建立
    var person = {
        name : "mjj",
        age: 18,
        gender: "female",
        fav: function(){
            alert("愛好打球");
        }
    }
    console.log(person.name);
    console.log(person.fav());
    </script>
</body>
</html>

25. 內建物件array

<!DOCTYPE html>
<html>
<head>
    <title>內建物件array</title>
</head>
<body>
    <script type="text/javascript">
    // array的建立方式1:
    var arr = [1, 2, 3, 4]
    // array的建立方式2(建構函式):
    var colors = new Array();
    // 這種建立方式等價於以下方式:
    var colors2 = [];
    // 以下方法可以提高準確性.
    if (Array.isArray(colors)){
        colors[0] = 'red';
        console.log(colors[0]);
        console.log(colors.length);
    }
    if (Array.isArray(colors)){
        colors[0] = "red";
        colors[1] = "blue";
        colors[2] = "green";
        // 將array轉化為string
        var a = colors.toString();
        console.log(a);
        console.log(colors);
    }

    </script>
</body>
</html>

26. 陣列的join方法

<!DOCTYPE html>
<html>
<head>
    <title>陣列的join方法</title>
</head>
<body>
    <script type="text/javascript">
      // 將陣列轉化為字串的三種方法: toString toLocaleString join('分隔符')
var arr = [1,2,3]; var a = arr.toString(); var b = arr.toLocaleString(); console.log(a); // 結果:1,2,3 console.log(b); // 結果:1,2,3 // 如果陣列中存放的是函式物件, 那麼toString和toLocaleString方法得到的結果則不同. 通常使用的是toString來實現陣列轉字串. // 使用指定的分隔符分隔字串. var colors = ['red', 'blue', 'green']; var a = colors.join(','); console.log(a); // 結果為字串, 以逗號分隔: red,blue,green // toString和toLocalString方法預設使用逗號將元素隔開, join方法可以指定分隔符, 例如|等. </script> </body> </html>

27. 陣列的棧方法和佇列方法

<!DOCTYPE html>
<html>
<head>
    <title>陣列的棧方法和佇列方法</title>
</head>
<body>
    <script type="text/javascript">
        // 棧: 後進先出
        //     push() 在末尾追加, 返回陣列的長度
        //     pop() 刪除最後一項元素, 返回刪除的最後一項元素
        var colors = ['red','blue','green']
        var newlength = colors.push('purple');
        // 返回的是列表的長度.
        console.log(newlength);
        // 結果: 4
        console.log(colors);
        // 結果: ["red", "blue", "green", "purple"]
        var lastItem = colors.pop();
        console.log(lastItem);
        // 結果: purple
        console.log(colors);
        // 結果: ["red", "blue", "green"]


        // 佇列: 先進先出
        // shift()  刪除陣列的第一個元素, 返回刪除的元素
        // unshift()  往陣列的第一項新增元素, 返回新增後的陣列的長度
        var newlength2 = colors.unshift('yellow');
        console.log(newlength2);
        // 結果: 4
        console.log(colors);
        // 結果: ["yellow", "red", "blue", "green"]
        var firstItem = colors.shift();
        console.log(firstItem);
        // 結果: yellow
        console.log(colors);
        // 結果: ["red", "blue", "green"]
    </script>
</body>
</html>

28. 陣列排序

<!DOCTYPE html>
<html>
<head>
    <title>陣列排序</title>
</head>
    <script type="text/javascript">
        var values = [1, 2, 3, 4, 5,10, 18];
        // 將陣列中值的順序進行反轉
        values.reverse();
        console.log(values);
        // 結果: [5, 4, 3, 2, 1]

        // 陣列排序,預設按照ascii碼升序,使用reverse進行降序排序
        // 陣列在排序之前,會將數值轉化為字串,然後進行排序
        values.sort();
        console.log(values);
        // 結果: [1, 10, 18, 2, 3, 4, 5]

        // 如果要比較兩個數值的大小,則應採用以下方法:
        function compare1(a,b){
            if(a<b){
                return -1;
            }else if(a>b){
                return 1;
            }else{
                return 0;
            }
        }
        values.sort(compare1);  //升序
        console.log(values); // 結果: [1, 2, 3, 4, 5, 10, 18]
        // 將以上程式碼簡寫:
        function compare11(a,b){
            return a-b;
        }

        function compare2(a,b){
            if(a>b){
                return -1;
            }else if(a<b){
                return 1
            }else{
                return 0;
            }
        }
        values.sort(compare2);
        console.log(values);  // 結果: [18, 10, 5, 4, 3, 2, 1]
        // 將以上程式碼簡寫:
        function compare22(a,b){
            return b-a;
        }

    </script>
</body>
</html>

29. 陣列的操作方法

<!DOCTYPE html>
<html>
<head>
    <title>陣列的操作方法</title>
</head>
    <script type="text/javascript">
        //1. concat() 對陣列進行合併,得到新的陣列,不會影響原來的陣列
        var colors = ['red','blue'];
        colors.concat() // concat()中可以是一個數組或多個數組, 或者不是陣列。
        var newColors1 = colors.concat('green');
        console.log(newColors1);  //結果: ["red", "blue", "green"]
        var newColors2 = colors.concat({"name":"張三"});
        console.log(newColors2);  // 結果:["red", "blue", Object]
        var newColors3 = colors.concat({"name":"lisa"},[1,2]);
        console.log(newColors3); // 結果:["red", "blue", Object, 1, 2]

        //2. slice() 對陣列進行分割,不會影響原來的陣列,會返回新的陣列. 
        var names = ['tom', 'sara','sunny','rita'];
        // 一個引數,表示切割的步長
        newNames1 = names.slice(1);
        console.log(newNames1);  // 結果:["sara", "sunny", "rita"]
        //兩個引數,第一個是起始位置,第二個是結束位置,且顧頭不顧尾
        newNames2 = names.slice(2,3);
        console.log(newNames2);  // 結果:["sunny"]
        newNames3 = names.slice(-2, -1);
        console.log(newNames3);  // ["sunny"]
        // 三個引數,第一個表示起始位置,第二個表示結束位置,第三個表示步長。
        newNames4 = names.slice()


        //3. splice() 對陣列進行新增,刪除或替換
        //3.1 刪除,兩個引數
        var fruits = ['apple', 'banana', 'orange'];
        // 從0開始刪除兩個元素,會影響原來的陣列。
        fruits.splice(0,2);
        //3.2 插入, 三個引數
        // 1表示從1開始,0表示不去刪除元素,後面的表示插入的元素
        fruits.splice(1,0,'sara','sunny');
        //3.3 替換
        // 刪除一個元素,索引為1,然後新增第三個引數,表示替換。
        fruits.splice(1,1,'rita');
    </script>
</body>
</html>

30. 陣列的位置方法

<!DOCTYPE html>
<html>
<head>
    <title>陣列的位置方法</title>
</head>
    <script type="text/javascript">
        // 位置方法 
        // indexOf()  從前往後找
        // lastIndexOf()  從後往前找
        var names = ['alex', 'sunny', 'tom', 'alex', 'rita']
        var ind = names.indexOf('sunny');
        console.log(ind); // 1
        var ind2 = names.lastIndexOf('alex');
        console.log(ind2); // 3
        // 下面的引數2表示從索引為2的位置進行查詢
        var ind3 = names.indexOf('alex',2);
        console.log(ind3); // 3
        var ind4 = names.lastIndexOf('alex',2);
        console.log(ind4); // 0
        // 注意:如果查不到結果就返回-1,查到結果就返回當前項的索引
    </script>
</body>
</html>

31. 陣列的迭代方法

<!DOCTYPE html>
<html>
<head>
    <title>陣列的迭代方法</title>
</head>
    <script type="text/javascript">
        //1. filter() 將陣列的元素進行過濾, 其中傳入匿名函式
        var numbers = [1,2,3,4,5,6,20]
        var filterResult = numbers.filter(function(item,index,array){
            return item > 10;
        });
        console.log(filterResult);  // [20]

        //2. map()  對陣列的每一項進行操作, 其中傳入匿名函式
        var mapResult = numbers.map(function(item, index, array){
                return item*2;
        });
        console.log(mapResult);// [2, 4, 6, 8, 10, 12, 40]
        // 遍歷
        for(var i = 0; i < mapResult.length; i++){
            console.log(mapResult[i]);
        }

        //3. forEach(),其中傳入匿名函式
        mapResult.forEach(function(item,index,array){
            console.log(item);
        });

    </script>
</body>
</html>

32. map方法的應用

<!DOCTYPE html>
<html>
<head>
    <title>map方法的應用</title>
</head>
    <script type="text/javascript">
        var people = [
        {
            'name':"alex",
            "age":18
        },
        {
            'name':'apple',
            'age':20
        },
        {
            'name':'sunny',
            'age':30
        }
        ]
        var names = people.map(
            function(item,index,array){
                return item.name;
            }
            )
        console.log(names); // ["alex", "apple", "sunny"]
        var ages = people.map(
            function(item,index,array){
                return item.age;
            }
            )
        console.log(ages); // [18, 20, 30]
    </script>
</body>
</html>

33. 字串的字元方法

<!DOCTYPE html>
<html>
<head>
    <title>字串的字元方法</title>
</head>
    <script type="text/javascript">
        /*
        屬性
            length  獲取字串的長度
        方法
            charAt()  獲取某個索引處的字元
            charCodeAt() 獲取某個索引處字元對應的編碼(ascii碼)
            concat()  字串拼接, 可以傳多個引數,通常不使用這種方法. 通常使用+來做多個字元的拼接.
            slice()  
            substr()
            substring()
            indexOf()
            lastIndexOf()
            trim()
            toLowerCase()
            toLocaleLowerCase()
            toUpperCase()
            toLocaleUpperCase()
        */
        var str = 'hello world';
        console.log(str.length); //11
        console.log(str.charAt(1)); //e
        console.log(str.charCodeAt(1)); //101
        console.log(str.concat('!')); //hello world!    
    </script>
</body>
</html>

34. 字串的切片方法

<!DOCTYPE html>
<html>
<head>
    <title>字串的切片方法</title>
</head>
    <script type="text/javascript">
        /*
        屬性
            length  獲取字串的長度
        方法
            charAt()  獲取某個索引處的字元
            charCodeAt() 獲取某個索引處字元對應的編碼(ascii碼)
            concat()  字串拼接, 可以傳多個引數,通常不使用這種方法. 通常使用+來做多個字元的拼接.
            slice()  
            substr()
            substring()
            indexOf()
            lastIndexOf()
            trim()
            toLowerCase()
            toLocaleLowerCase()
            toUpperCase()
            toLocaleUpperCase()
        */
        var str = 'hello world';
        console.log(str.length); //11
        console.log(str.charAt(1)); //e
        console.log(str.charCodeAt(1)); //101
        console.log(str.concat('!')); //hello world!
        //如果只傳一個引數,slice(),substr()和substring()的效果一樣, 不同的是第二個引數. 一個引數表示起始位置, 一直截到字串末尾.
        console.log(str.slice(2)); //llo world 
        console.log(str.substr(2));//llo world
        console.log(str.substring(2)); //llo world    
        console.log(str.slice(2,4)); //ll 第一個引數是起始位置, 第二個引數是結束位置, 且顧頭不顧尾.
        console.log(str.substr(2,6)); //llo wo, 第一個引數是起始位置, 第二個引數表示返回的字元的個數, 第二個引數一定是個正數.
        console.log(str.substring(2,4)); //ll 第一個引數是起始位置, 第二個引數是結束位置, 且顧頭不顧尾.

    </script>
</body>
</html>

35. 字串的其他方法

<!DOCTYPE html>
<html>
<head>
    <title>字串的切片方法</title>
</head>
    <script type="text/javascript">
        /*
        屬性
            length  獲取字串的長度
        方法
            charAt()  獲取某個索引處的字元
            charCodeAt() 獲取某個索引處字元對應的編碼(ascii碼)
            concat()  字串拼接, 可以傳多個引數,通常不使用這種方法. 通常使用+來做多個字元的拼接.
            slice()  
            substr()
            substring()
            indexOf()
            lastIndexOf()
            trim() 清除字串前後的空格
            toLowerCase() 全部轉成小寫, 常用
            toLocaleLowerCase() 在特定地區有用
            toUpperCase() 全部轉成大寫, 常用
            toLocaleUpperCase() 在特定地區有用
        */
        var str = 'hello world';
        console.log(str.length); //11
        console.log(str.charAt(1)); //e
        console.log(str.charCodeAt(1)); //101
        console.log(str.concat('!')); //hello world!
        //如果只傳一個引數,slice(),substr()和substring()的效果一樣, 不同的是第二個引數. 一個引數表示起始位置, 一直截到字串末尾.
        console.log(str.slice(2)); //llo world 
        console.log(str.substr(2));//llo world
        console.log(str.substring(2)); //llo world    
        console.log(str.slice(2,4)); //ll 第一個引數是起始位置, 第二個引數是結束位置, 且顧頭不顧尾.
        console.log(str.substr(2,6)); //llo wo, 第一個引數是起始位置, 第二個引數表示返回的字元的個數, 第二個引數一定是個正數.
        console.log(str.substring(2,4)); //ll 第一個引數是起始位置, 第二個引數是結束位置, 且顧頭不顧尾.
        console.log(str.indexOf('o')); //4
        console.log(str.lastIndexOf('o')); //7  從後往前找
        console.log(str.indexOf('o',6)); //7, 從6開始往後找
        console.log(str.lastIndexOf('o',6));//4, 從6往前找
        var str1 = '   hello world   ';
        console.log(str.trim()); //hello world
        console.log(str.toUpperCase()); //HELLO WORLD
    </script>
</body>
</html>

36. 如何查詢當前字元的所有位置

<!DOCTYPE html>
<html>
<head>
    <title>如何查詢當前字元的所有位置</title>
</head>
    <script type="text/javascript">
        //查詢e在str中的所有位置
        var str = 'He unfolded the map and set it on the floor.'
        var arr = [];
        for(i=0; i<str.length; i++){
            if(str[i]==='e'){
                arr.push(i);
            }
        }
        console.log(arr);
        // [1, 9, 14, 25, 36]
    </script>
</body>
</html>

37. date日期物件的建立方式

<!DOCTYPE html>
<html>
<head>
    <title>date日期物件的建立方式</title>
</head>
    <script type="text/javascript">
        // UTC 1970.1.1 - 285616年
        // Date日期物件, 其中可以傳引數, 也可以不傳引數.

        // 方式1(常用)
        var now = new Date();
        console.log(now);
        // Sun Sep 13 2020 12:05:39 GMT+0800 (中國標準時間)

        //方式2
        var xmas = new Date('December 25,1995 13:30:00');
        console.log(xmas);
        // Mon Dec 25 1995 13:30:00 GMT+0800 (中國標準時間)

        //方式3
        // 月份0-11
        var xmas1 = new Date(1995,11,25);
        console.log(xmas1);
        //Mon Dec 25 1995 00:00:00 GMT+0800 (中國標準時間)

        //方式4
        var xmas2 = new Date(1995,11,25,14,30,0);
        console.log(xmas2);
        //Mon Dec 25 1995 14:30:00 GMT+0800 (中國標準時間)
    </script>
</body>
</html>

38. Date的常用方法

<!DOCTYPE html>
<html>
<head>
    <title>Date的常用方法</title>
</head>
    <script type="text/javascript">
        var now = new Date();
        console.log(now.getDate());//13   獲取日期(1-31)
        console.log(now.getMonth());//9   獲取月份(0-11)
        console.log(now.getFullYear());//2020   獲取年份
        console.log(now.getDay());//0(星期天)   獲取一星期中的第幾天(0-6)
        console.log(now.getHours()); //12   獲取小時(0-23)
        console.log(now.getMinutes());//28   獲取分鐘數(0-59)
        console.log(now.getSeconds());//49   獲取秒數(0-59)
    </script>
</body>
</html>

39. 日期格式化方法

<!DOCTYPE html>
<html>
<head>
    <title>日期格式化方法</title>
</head>
    <script type="text/javascript">
        var now = new Date();
        console.log(now.toDateString());
        // Sun Sep 13 2020
        console.log(now.toTimeString());
        // 16:39:30 GMT+0800 (中國標準時間)

        console.log(now.toLocaleDateString());
        // 2020-9-13   常用
        console.log(now.toLocaleTimeString());
        // 16:42:17  常用
        console.log(now.toLocaleString());
        // 2020-9-13 16:43:24  常用

        console.log(now.toUTCString());
        // Sun, 13 Sep 2020 08:45:02 GMT
    </script>
</body>
</html>

40. 如何顯示數字時鐘的格式時間

<!DOCTYPE html>
<html>
<head>
    <title>如何顯示數字時鐘的格式時間</title>
</head>
    <script type="text/javascript">
        function nowNumTime(){
            var now = new Date();
            var hour = now.getHours();
            var minute = now.getMinutes();
            var second = now.getSeconds();
            var temp = "" + (hour>12 ? hour-12 : hour);
            if(hour === 0){
                temp = "12";
            }
            temp = temp + (minute<10 ? ':0' : ':') + minute;
            temp = temp + (second<10 ? ':0' : ':') + second;
            temp = temp + (hour >= 12 ? ' P.M.' : ' A.M.');
            return temp;
        }
        var time = nowNumTime();
        console.log(time);
        // 5:15:04 P.M.
    </script>
</body>
</html>

41. 字串和數值型別相互轉換

<!DOCTYPE html>
<html>
<head>
    <title>字串和數值型別相互轉換</title>
</head>
    <script type="text/javascript">
        //1. 將數字字串轉化為整型
        var str1 = '1.234555';
        console.log(parseInt(str1));
        // 1
        var str2 = '1344dxdfdf009';
        console.log(parseInt(str2));
        // 1344

        //2. 將數字字串轉化為浮點型
        var str3 = '325.45667';
        console.log(parseFloat(str3));
        // 325.45667
        console.log(Number(str3));
        // 325.45667
        var str4 = '3434dsfsg.543';
        console.log(Number(str4));
        // NaN
        console.log(isNaN(Number(str4)));  //檢測結果是否為NaN
        // true

        //3. 將數值轉化為字串(強制型別轉換)
        var num1 = 124.34;
        console.log(num1.toString());
        //124.34
        console.log(String(num1));
        //124.34

        //4. 隱式轉換
        console.log(''+ num1);
        //124.34
        console.log(''.concat(num1));
        //124.34

        //5. 按小數點後固定位數轉換
        console.log(num1.toFixed()); //124  四捨五入只保留整數
        console.log(num1.toFixed(2));// 124.34
    </script>
</body>
</html>

42. global物件的編碼和解碼方式

<!DOCTYPE html>
<html>
<head>
    <title>global物件的編碼和解碼方法</title>
</head>
    <script type="text/javascript">
        //編碼
        // URI:統一資源識別符號
        var uri = 'http://www.aplend.cn/web index.html?name=alex';
        console.log(encodeURI(uri));//對空格進行解析
        //http://www.aplend.cn/web%20index.html?name=alex
        console.log(encodeURIComponent(uri));//對空格,問號,冒號,斜槓等進行解析, 這種方法使用較多
        //http%3A%2F%2Fwww.aplend.cn%2Fweb%20index.html%3Fname%3Dalex

        //解碼
        var encodeuri1 = 'http://www.aplend.cn/web%20index.html?name=alex';
        console.log(decodeURI(encodeuri1));// 只能解析空格
        // http://www.aplend.cn/web index.html?name=alex
        var encodeuri2 = 'http%3A%2F%2Fwww.aplend.cn%2Fweb%20index.html%3Fname%3Dalex';
        console.log(decodeURIComponent(encodeuri2));
        // http://www.aplend.cn/web index.html?name=alex
    </script>
</body>
</html>

43. window物件講解

<!DOCTYPE html>
<html>
<head>
    <title>window物件講解</title>
</head>
    <script type="text/javascript">
        // js提供了一個window物件, 在目前的環境下, window物件就相當於global物件. 全域性作用域下宣告的變數或函式都成為了window物件的屬性或方法.
        var a = 3;
        console.log(window.a);
        function hello(){
            alert(window.a);
        }
        window.hello();
        // 在當前瀏覽器環境下, window物件等價於global物件. 全域性作用域下宣告的變數或函式都掛在window物件下. 在ECMAScript或JS中, 頂層物件就是window.
    </script>
</body>
</html>

44. Math數學物件

<!DOCTYPE html>
<html>
<head>
    <title>Math數學物件</title>
</head>
    <script type="text/javascript">
        // 屬性(使用較少)
        console.log(Math.E);
        // 2.718281828459045
        console.log(Math.LN2);
        // 0.6931471805599453
        console.log(Math.LN10);
        // 2.302585092994046
        console.log(Math.LOG2E);
        // 1.4426950408889634
        console.log(Math.LOG10E);
        // 0.4342944819032518
        console.log(Math.PI);
        // 3.141592653589793
        console.log(Math.SQRT2); //2的平方根
        // 1.4142135623730951
        console.log(Math.SQRT1_2); //2的平方根的倒數
        // 0.7071067811865476
        
        //方法
        //1.max()  min()
        var max = Math.max(1,3,45,56,21);
        console.log(max);
        // 56
        var min = Math.min(1,2,3,5,78);
        console.log(min);
        // 1
        var arr = [1,23,45,67,87];
        var max1 = Math.max.apply(null,arr);
        console.log(max1);
        // 87

        //2.ceil()  floor()  round()
        var num = 24.3;
        console.log(Math.ceil(num)); //往前進一位, 向上取整
        // 25
        console.log(Math.floor(num)); //捨棄小數點後數字, 向下取整
        // 24
        console.log(Math.round(num)); //標準的四捨五入
        //24


        //3.隨機數 random() 0=<random<1
        console.log(Math.random());
        // 0.5704137720924052

        //3.1 獲取min到max之間的整數(獲取某個範圍的隨機整數)
        function random(min,max){
            return rint = Math.floor(Math.random() * (max-min) + min);
        }
        //3.2 獲取隨機顏色 rgba(0-255,0-255,0-255);
        function randomColor(){
            var r = random(0,256), g = random(0,256), b = random(0,256);
            // 模板字串``(位於tab鍵上方)
            var result = `rgb(${r},${g},${b})`;
            return result;
        }
        var rc = randomColor();
        console.log(rc);
        // document.body.style.backgroundColor = rc;

        //3.3 隨機驗證碼
        function createCode(){
            var code = '';
            var codeLength = 4;
            var randomCode = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
            for(var i = 0; i < codeLength; i++){
                var index = random(0,36);
                code += randomCode[index];
            }
            return code;
        }
        var randomCode = createCode();
        console.log(randomCode);
    </script>
</body>
</html>

45. 隨機物件

<!DOCTYPE html>
<html>
<head>
    <title>隨機物件</title>
</head>
    <script type="text/javascript">
        //3.隨機數 random() 0=<random<1
        console.log(Math.random());
        // 0.5704137720924052

        //3.1 獲取min到max之間的整數(獲取某個範圍的隨機整數)
        function random(min,max){
            return rint = Math.floor(Math.random() * (max-min) + min);
        }
        //3.2 獲取隨機顏色 rgba(0-255,0-255,0-255);
        function randomColor(){
            var r = random(0,256), g = random(0,256), b = random(0,256);
            // 模板字串``(位於tab鍵上方)
            var result = `rgb(${r},${g},${b})`;
            return result;
        }
        var rc = randomColor();
        console.log(rc);
        // document.body.style.backgroundColor = rc;

        //3.3 隨機驗證碼
        function createCode(){
            var code = '';
            var codeLength = 4;
            var randomCode = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
            for(var i = 0; i < codeLength; i++){
                var index = random(0,36);
                code += randomCode[index];
            }
            return code;
        }
        var randomCode = createCode();
        console.log(randomCode);
    </script>
</body>
</html>