Python全棧之學習JS(2)

1. js對象

1.1 object對象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>object對象</title>
</head>
<body>
    <script>
        // 1.定義對象方法一
        var obj = new Object();
        console.log(obj , typeof(obj))
        obj.name = "孫堅";
        obj.age = 18;
        obj.weight = "200斤";
        obj.eat = function(){
            alert("我會吃竹子");
        }
        console.log(obj.name)
        // obj.eat();
        //2.定義對象方法二
        /* 對象中的成員不要使用單引號,在特殊場景中,比如json格式字符串的轉換中會報錯; */
        var obj = {
            name:"張三",
            "age" : 20,
            sex   : "男性",
            drink : function(something){
                console.log("我會喝牛欄山",something);
            }
        }
        //調用方式一
        console.log(obj.sex)
        obj.drink("老白幹")
        //調用方式二
        console.log(obj["age"])
        obj["drink"](1)
        // 註意點
        var str = "name"
        console.log(obj.str , "<==========================>") //error
        console.log(obj.name)
        console.log(obj[str]) // obj["name"]
        // eval 可以把字符串當成代碼執行
        eval("console.log(333)")
        //3.定義對象方法三
        /* 類比python中定義類的寫法 , this等價於self */
        function Person(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.func = function(){
                console.log("我是func");
                return this.sex;
            }
        }
        var obj1 = new Person("劉一風",30,"男性");
        var obj2 = new Person("張三風",90,"女性");
        console.log(obj1.name);
        var res = obj1.func();
        console.log(res);
        console.log(obj2.name)
        var res = obj2.func();
        console.log(res);
        //4.遍歷對象 
        for(var i in obj1){
            console.log(i)
        }
        //5. with(對象) 語法可以直接獲取對象成員的值
        with(obj1){
            console.log(name);
            console.log(sex);
            console.log(age);
            res = func();
            console.log(res);
        }
        console.log("<===================================>")
        //將4和5結合,遍歷對象中的數據;
        for(var i in obj1){
            //console.log(i , typeof(i)) // name age sex func  ... string
            with(obj1){
                console.log(eval(i))
            }
        }

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

1.2 json對象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>json對象</title>
</head>
<body>
    <script>
        var data = {
            'name':"文東",
            age:20,
            "sleep":function(){
                alert("文東一天睡23小時,還有一個小時上廁所.");
            }
        }
        // js對象 => json格式的字符串
        var res = JSON.stringify(data);
        console.log(res , typeof(res)); // {"name":"文東","age":20} 
        // json格式的字符串 => js對象
        res = '{"name":"東東","age":30}';  // success
        // res = "{'name':90,'age':40}"; error 引號必須是雙引號
        var res2 = JSON.parse(res);
        console.log(res2,typeof(res2));

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

2. js字符串函數

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>字符串對象的相關方法</title>
</head>
<body>
    <script>
        var string = "to be or not to be";
        //獲取字符串長度 length	
        var res = string.length
        var res = string[-1]
        console.log(res)
        //1.清除兩側的空白 trim [ python的strip ]
        var res = string.trim()
        console.log(string)
        console.log(res)
        //2.獲取首次出現的位置 indexOf   [ python的find ]
         /*找不到返回-1*/
        var string = "to be or not to be";
        var res = string.indexOf("z")
        console.log(res)
        //3/最後一次出現的位置 lastIndexOf 
        /*找不到返回-1*/
        var res = string.lastIndexOf("zzz")
        console.log(res);
        //4.連接字符串	concat	 [ python的 os.path.join  + ]
        var res = string.concat("d:\\","python32\\","day42");
        console.log(res);
        //5.截取字符串 slice
        /* string.slice(開始值,結束值) 字符串的切片  留頭舍尾  [支持逆向下標]*/
        var string = "11122233e or not to be";
        var res = string.slice(1,7);
        var res = string.slice(-5,-1);      // to b
        // var res = string.slice(-5,-10); //截取不到返回空
        console.log(res,"<==1==>")
        //6.截取字符串 substr
        /* string.substr(開始值,截取幾個) */
        var string = "11122233e or not to be";
        var res = string.substr(3,4)
        console.log(res,"<==2==>")
        //7.拆分字符串 split  [ python的 split ]
        var string = "11122233e or not to be";
        var res = string.split(" ")
        console.log(res,"<==3==>")
        //8.大小寫 toUpperCase toLowerCase
        var string = "11122233e Or noT tO be";
        res = string.toUpperCase();
        res = string.toLowerCase();
        console.log(res,"<==4==>")
        //9.search 匹配第一次找到的索引位置,找不到返回-1
        var string = "aaabbb oldaoy ccc"
        var res = string.search(/oldboy/)
        console.log(res,"<==5==>")
        //10.match 返回匹配的數據
        /* /正則表達式/修飾符 g:全局匹配 i:不區分大小寫 m:多行匹配  */
        var string = "我的電話是 : 13838384388 你的電話是: 13854381438"
        var res = string.match(/\d{11}/);  // 匹配一個
        var res = string.match(/\d{11}/g); // 匹配多個,(需要修飾符加上g)
        console.log(res)
        console.log(res[0])
        console.log(res[1])
        //11.字符串替換 replace
        /* replace默認隻替換一次 */
        var string = "to be or not to be";
        var res = string.replace("to","two")
        console.log(res,"<==6==>")       
        // 方法一:
        function myreplace(string,a,b){
            /*
                找最後一個to,如果找不到返回-1
                如果能找到就不停的進行替換,直到-1為止,循環終止;
            */
            while(string.lastIndexOf(a) != -1){
                console.log(1)
                string = string.replace(a,b);
            }
            return string;
        }     
        var string = "to be or not to be";   
        var res = myreplace(string,"to","two")
        console.log(res) // two be or not two be
        // 方法二
        var string = "to be or not to be";
        var res = string.replace(/to/g,"two");
        console.log(res)
    </script>
</body>
</html>

3. js數組相關方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>數組對象的相關方法</title>
</head>
<body>
    <script>
        // 1.定義一個數組
        var arr = Array();
        var arr = Array(10,11,12);
        var arr = [15,16,17]
        console.log(arr , typeof(arr))
        // ### 1.增
        var arr = [];
        arr[0] = 10;
        arr[1] = 11;
        arr[2] = 12;
        // js特征:允許在一個臨時的索引值上插入數據; ok
        arr[10] = 50;
        console.log(arr)
        console.log(arr[5])

        // (1)push 從數組的最後插入元素  相當於python的append
        var arr = [];
        var res = arr.push(111);
        var res = arr.push(222);
        var res = arr.push(333);
        console.log(res,arr)
        // (2)unshift 從數組的前面插入元素 相當於python的insert
        var arr = [100,101];
        var res = arr.unshift(1);
        var res = arr.unshift(333);
        console.log(res , arr);
        // (3)concat 迭代追加數據 相當於python的extend
        var arr1 = [1,2,3]
        var arr2 = ["你好","我好","她也好"]
        var res = arr1.concat(arr2)
        console.log(res, typeof(res));
        // ###2刪
        // (1) delete 刪除
        /* 把值刪掉瞭,原位置用空來取代,返回undifined */
        var arr = [1, 2, 3, "你好", "我好", "她也好"];
        delete arr[1];
        console.log(arr);
        console.log(arr[1])
        // (2)pop  從後面刪除;
        var arr = [1, 2, 3, "你好", "我好", "她也好"];
        var res = arr.pop();
        console.log(res ,arr);
        // (3)shift 從前面刪除
        var arr = [1, 2, 3, "你好", "我好", "她也好"];
        var res = arr.shift()
        console.log(res , arr)
        // ###  特別splice  從指定位置往後進行刪除或者添加
        /* arr.splice(從第幾個位置開始,刪除幾個,[可選的是添加的元素])   */
        var arr = [1, 2, 3, "你好", "我好", "她也好"];
        // 從第二個2位置開始,刪除2個
        var res = arr.splice(2,2)
        console.log(res , arr)
        // 從第二個2位置開始,刪除0個,添加,"hello","world"
        var arr = [1, 2, 3, "你好", "我好", "她也好"];
        var res = arr.splice(2,0,"hello","world")
        console.log(res , arr)
        // ###3改查
        var arr = [1, 2, 3, "你好", "我好", "她也好"];
        //修改元素
        arr[3] = "你不好";
        //獲取元素
        console.log(arr[3]);
        console.log(arr);
        // ###4 其他方法
        // 拼接字符串  join
        /* split 和 join 是一對;*/
        var arr = ["you","can","you","up"];
        var res = arr.join("#")
        console.log(res)
        // 數組元素反轉 reverse
        var arr = [100,200,3,150];
        var res = arr.reverse();
        console.log(res);
        // 截取數組的一部分 slice 
        /* arr.slice(開始值,結束值) 數組的切片  留頭舍尾  [支持逆向下標]*/
        var arr = ["宋健","何旭彤","劉利偉","高雪峰","戈隆","王致和","馬生平"]
        var res = arr.slice(2)
        // var res = arr.slice(2,4)
        var res = arr.slice(-3,-1)
        console.log(res);
        // 排序 默認升序 sort
        var arr = [1,2,3,4,9,22,21];
        var arr = ["1","2","3","4","9","22","21"];
        var res = arr.sort()
        console.log(res)
        var arr = [100,1,2,3,4,9,22,21];
        // sorted 裡面的參數是一個函數,通過函數進行升序或者降序排序;
        /* return 1代表交換位置,如果return -1 代表不交換位置 */
        var res = arr.sort(function(a,b){
            if(a>b){
                return -1;
            }else{
                return 1;
            }               
        });
        console.log(res)
    </script>
    <!-- 
    python : 冒泡排序
        nums = [1,22,3,2,4,9,21];
    def bubble_sort(nums):
        for i in range(len(nums) - 1):  # 這個循環負責設置冒泡排序進行的次數
            for j in range(len(nums) - i - 1):  # j為列表下標
                if nums[j] > nums[j + 1]:
                    nums[j], nums[j + 1] = nums[j + 1], nums[j]
            break;
        return nums
    res = bubble_sort(nums)
    print(res) -->
</body>
</html>      

4. js數學對象相關方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>數學對象中的相關方法</title>
</head>
<body>
    <script>
        //四舍五入round
        var res = Math.round(3.5)
        var res = Math.round(2.5)
        var res = Math.round(2.31)
        console.log(res)
        //最大值 max        
        var res = Math.max(1,2,3,4,34343);
        //最小值 min
        var res = Math.min(1,2,3,4,34343);
        //絕對值 abs
        var res = Math.abs(-90);
        console.log(res)
        //向下取整 floor 地板
        var res = Math.floor(3.001)
        //向上取整 ceil 天花板
        var res = Math.ceil(3.990)
        //冪運算 pow
        var res = Math.pow(2,3)
        //開方運算 sqrt             
        var res = Math.sqrt(9)
        console.log(res)
        // ### 隨機值推導公式
        //獲取從0到1隨機值   0<x<1
        var res = Math.random()
        console.log(res)
        //獲取1~10的隨機值 1 <= x <= 10
        var res = Math.ceil(Math.random() * 10 )
        console.log(res)
        // 1.獲取從 m 到 n 的隨機值   5,14  m=5 , n=14
        // 1 <= x <= 10  =>  1+4 <= x <= 10+4 < 5 <= x <= 14
        var res = Math.ceil(Math.random() * 10 ) + 4
        //  m = 5 , n = 14
        // 2.拆解數字,把對應的m和n進行替換;
        var res = Math.ceil(Math.random() * (14-5+1) ) + (5 - 1)
        // 3.推出最後結果
        var res = Math.ceil(Math.random() * (n-m+1) ) + (m - 1)
        // 4.封裝函數:終極版:隨機值;
        function randrange(m,n){
            return Math.ceil(Math.random() * (n-m+1) ) + (m - 1);
        }

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

5. BOM對象

5.1 定時器

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>BOM對象 </title></head><body>    <script>        /*### BOMjs BOM對象  : 針對於瀏覽器的控制   browser object model js 中最大的對象 window 整個瀏覽器窗口出現的所有內容行為都是window對象中的成員;        */        console.log(window)        // 1.彈出警告框        // window.alert('你好')        // 2.確認彈窗        // var res = window.confirm("確認彈窗")        // console.log(res); // true / false        // 3.等待輸入彈窗        // var res = window.prompt("請輸入您的銀行密碼:")        // console.log(res);        // 4.關閉瀏覽器窗口        // window.close();        // innerHeight innerWidth 獲取瀏覽器窗口內部的寬和高        console.log(`瀏覽器窗口內部的寬度${window.innerWidth}`)        console.log(`瀏覽器窗口內部的高度${window.innerHeight}`)        // window.open("http://www.baidu.com","_self"); // 在當前頁面跳轉        // window.open("http://www.baidu.com","_blank","width=500,height=500");   // 在新窗口頁面跳轉        // ###定時器        /*            # 定時器種類(兩種):基於單線程的異步並發程序;            window.setInterval(函數名,間隔時間(毫秒))   // 定時執行多次任務            window.setTimeout(函數名,間隔時間(毫秒))    // 定時執行一次任務            window.clearInterval(id號)  // 清除定時器 setInterval            window.clearTimeout(id號)   // 清除定時器 setTimeout        */        var num = 1        function func(){            console.log(`我執行瞭${num}`);            num++;        }        var id1 = window.setInterval(func,1000);        var id2 = window.setTimeout(func,2000);        console.log(id1,"id1")        console.log(id2,"id2")        console.log("我執行完瞭....")        window.clearInterval(id1)    </script>    </body></html><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>BOM對象 </title>
</head>
<body>
    <script>
        /*
			### BOM
			js BOM對象  : 針對於瀏覽器的控制   browser object model 
			js 中最大的對象 window 整個瀏覽器窗口出現的所有內容行為都是window對象中的成員;
        */
        console.log(window)
        // 1.彈出警告框
        // window.alert('你好')
        // 2.確認彈窗
        // var res = window.confirm("確認彈窗")
        // console.log(res); // true / false
        // 3.等待輸入彈窗
        // var res = window.prompt("請輸入您的銀行密碼:")
        // console.log(res);
        // 4.關閉瀏覽器窗口
        // window.close();
        // innerHeight innerWidth 獲取瀏覽器窗口內部的寬和高
        console.log(`瀏覽器窗口內部的寬度${window.innerWidth}`)
        console.log(`瀏覽器窗口內部的高度${window.innerHeight}`)
        // window.open("http://www.baidu.com","_self"); // 在當前頁面跳轉
        // window.open("http://www.baidu.com","_blank","width=500,height=500");   // 在新窗口頁面跳轉
        // ###定時器
        /*
            # 定時器種類(兩種):基於單線程的異步並發程序;
            window.setInterval(函數名,間隔時間(毫秒))   // 定時執行多次任務
            window.setTimeout(函數名,間隔時間(毫秒))    // 定時執行一次任務
            window.clearInterval(id號)  // 清除定時器 setInterval
            window.clearTimeout(id號)   // 清除定時器 setTimeout
        */
        var num = 1
        function func(){
            console.log(`我執行瞭${num}`);
            num++;
        }
        var id1 = window.setInterval(func,1000);
        var id2 = window.setTimeout(func,2000);
        console.log(id1,"id1")
        console.log(id2,"id2")
        console.log("我執行完瞭....")
        window.clearInterval(id1)
    </script>
</body>
</html>

5.2 獲取年月日時分秒

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>獲取年月日時分秒</title>
    <style>
        #clock
        {
            width:500px;
            height:50px;
            border:solid 1px red;
            border-radius: 25px;
            text-align: center;
            line-height: 50px;
            background-color: chartreuse;
            color:red;
        }
    </style>
</head>
<body>
    <div id="clock"> </div>
    <script>
        var obj = document.getElementById("clock");
        console.log(obj)
        function func(){
            var d = new Date();
            console.log(d);
            // 獲取年份
            var year = d.getFullYear()
            // 獲取月份 月份范圍 0 ~ 11 0代表1月份
            var month = d.getMonth()
            // 獲取日期
            var date = d.getDate()
            // 獲取小時
            var hour = d.getHours()
            // 獲取分鐘
            var minutes = d.getMinutes()
            // 獲取秒數
            var seconds = d.getSeconds()
            strvar= `現在的時間是: ${year}年-${month+1}月-${date}日  ${hour}:${minutes}:${seconds}`;
            console.log(strvar);
            obj.innerHTML = strvar
            console.log(minutes, typeof(minutes));
            // 清除定時器的效果
            if(minutes == 8){
                clearInterval(id);
            }
        }
        var id = window.setInterval(func,1000)

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

5.3 Navigator

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>BOM模型中 Navigator 對象 </title>
</head>
<body>
    <script>
        console.log(navigator);
        console.log(navigator.platform)  // 判斷是pc端還是移動端
        console.log(navigator.userAgent) // 在爬蟲程序中,可以偽造成瀏覽器進行數據爬取,繞開服務端的反爬機制;
    </script>
</body>
</html>

5.4 歷史對象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="func1()">查看歷史對象</button>
    <button onclick="func2()">跳轉到上一頁</button>
    <button onclick="func3()">跳轉到下一頁</button>
    <button onclick="func4()">當前頁面刷新</button>
    <script>
        function func1(){
            console.log(history);
        }
        function func2(){
            history.go(-1);
        }
        function func3(){
            // history.go(1);
            history.go(2);
        }
        function func4(){
            history.go(0);
        }
    </script>
</body>
</html>

6. BOM對象location

location作用: 負責刷新頁面,跳轉頁面用的,可以獲取地址欄上面的參數

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>BOM對象 location</title>
</head>
<body>
    <button onclick="func1()">查看location對象</button>
    <button onclick="func2()">跳轉其他頁面</button>
    <button onclick="func3()">刷新頁面</button>
    <button onclick="func4()">過一秒在刷新頁面</button>
    <script>
        function func1(){
            /* 鏈接地址:  http://ip + 端口號 + 路徑 + 參數 + 錨點 */
            console.log(location);
            console.log(`協議:${location.protocol}`);
            console.log(`ip端口號:${location.host}`);
            console.log(`端口號:${location.port}`);
            console.log(`路徑:${location.pathname}`);
            console.log(`獲取錨點:${location.hash}`);
            console.log(`獲取地址欄參數:${location.search}`);
            console.log(`完全地址:${location.href}`)
        }
        //跳轉頁面
        function func2(){
            // location.href = "http://www.baidu.com";方法一
            location.assign("http://www.jd.com");
        }
        //刷新頁面
        function func3(){
            location.reload();
        }
        // 過一秒在刷新頁面
        function func4(){
            setTimeout(func3,1000);
            console.log("我執行瞭...")
        }
        // 每過一秒刷新一下頁面
        /* 等待所有頁面圖片文字全部加載完畢之後,再去執行對應的代碼 */
        window.onload = function(){
            func4()
        }
    </script>
</body>
</html>

7. 小提示

js三大對象
1. 本地對象:js語法
2. bom對象:瀏覽器相關的成員(針對於瀏覽器的控制)brower object model
3. dom文檔對象:關於html文件節點相關的數據、相關的值(針對於html的控制) document object model
js是單線程的異步程序
定時器是單線程的異步程序(例子)

ceshi.html:

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <style>
 *{margin:0;
 padding:0;
 list-style:none;}
 .wrap{height:170px;
 width:490px;
 margin:60px auto;
 overflow: hidden;
 position: relative;
 margin:100px auto;}
 .wrap ul{position:absolute;} 
 .wrap ul li{height:170px;}
 .wrap ol{position:absolute;
 right:5px;
 bottom:10px;}
 .wrap ol li{height:20px; width: 20px;
 background:#ccc;
 border:solid 1px #666;
 margin-left:5px;
 color:#000;
 float:left;
 line-height:center;
 text-align:center;
 cursor:pointer;}
 .wrap ol .on{background:#E97305;
 color:#fff;}
 </style>
 <script type="text/javascript">
 window.onload=function(){
 var wrap=document.getElementById('wrap'),
 pic=document.getElementById('pic').getElementsByTagName("li"),
 list=document.getElementById('list').getElementsByTagName('li'),
 index=0,
 timer=null;
 // 定義並調用自動播放函數
 timer = setInterval(autoPlay, 2000);
 // 鼠標劃過整個容器時停止自動播放
 wrap.onmouseover = function () {
 clearInterval(timer);
 }
 // 鼠標離開整個容器時繼續播放至下一張
 wrap.onmouseout = function () {
 timer = setInterval(autoPlay, 2000);
 }
 // 遍歷所有數字導航實現劃過切換至對應的圖片
 for (var i = 0; i < list.length; i++) {
 list[i].onmouseover = function () {
 clearInterval(timer);
 index = this.innerText - 1;
 changePic(index);
 };
 };
 function autoPlay () {
 if (++index >= pic.length) index = 0;
 changePic(index);
 }
 // 定義圖片切換函數
 function changePic (curIndex) {
 for (var i = 0; i < pic.length; ++i) {
 pic[i].style.display = "none";
 list[i].className = "";
 }
 pic[curIndex].style.display = "block";
 list[curIndex].className = "on";
 }
 };
 </script> 
</head>
<body>
 <div class="wrap" id='wrap'>
 <ul id="pic">
 <li><img src="../image/img1.png" alt=""></li>
 <li><img src="../image/img2.png" alt=""></li>
 <li><img src="../image/img3.png" alt=""></li>
 </ul>
 <ol id="list">
 <li class="on">1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
 </ol>
 </div>
</body>
</html>

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: