初識javaScript(九)物件(二)

2020-08-09 11:22:07

1 Math物件

Math 物件。
1:js的內建物件,工具物件,定義了大量的靜態方法。用於數學計算的。
還有和數學計算相關的常數。
2:常數。
Math.E // 返回歐拉指數(Euler’s number)
Math.PI // 返回圓周率(PI)
Math.SQRT2 // 返回 2 的平方根
Math.SQRT1_2 // 返回 1/2 的平方根
Math.LN2 // 返回 2 的自然對數
Math.LN10 // 返回 10 的自然對數
Math.LOG2E // 返回以 2 爲底的 e 的對數(約等於 1.414)
Math.LOG10E // 返回以 10 爲底的 e 的對數(約等於0.434)
3: 工具方法
1弧度===180/Math.PI

<body>
<script>
   //常數
   console.log (Math.PI);//3.141592653589793

   //工具方法
   console.log (Math.random());//[0.0-1.0)
   console.log (Math.ceil(1.1));//2
   console.log (Math.floor(2.9));//2
   console.log (Math.sqrt(9));//3
   console.log (Math.tan(45*Math.PI/180));//1
   console.log (Math.sin(30*Math.PI/180));//0.5
   console.log (Math.pow(2,3));//8
   console.log (Math.round(4.5));//5
   console.log (Math.max(1,2,4,54,67,4,3,56,4));//67
   console.log (Math.min(1,2,4,54,67,4,3,56,4));//1
   console.log (Math.abs(-1));//1

</script>
</body>

2 Date物件

Date是js用於處理日期和時間的程式碼庫。
Date物件以1970年1月1日爲時間原點。
1: Date作爲工具方法直接呼叫。
返回的是一個西方的日期字串物件。
2:Date作爲建構函式使用。
1:無參呼叫:返回系統當前時間物件。
2:可以傳入指定時間的日期字串。得到的是一個指定日期的物件。
3:靜態方法。
Date.now(): 當前的系統時間和時間原點的時間差,以毫秒返回。
1s=1000毫秒
1s
=1000000微秒
1s===1000000000納秒
Date.parse(str):用於解析時間字串的。得到傳入的參數的時間和時間原點的時間差,毫秒返回。
如果解析不成功返回 NaN
4:實體方法:
a:to 類:將日期物件轉換爲字串。**
b:get 類:得到當前日期物件的某些屬性的。***
c:set 類:設定當前日期物件的某些屬性。**
5:結論:
1:月份的返回值是0-11. 必須做+1操作才能 纔能和月份對上。
2:getDay() 的返回值是 0-6 .代表了週日到週六。西方國家的一週的開始的第一天是週日。
3:中國的時區在東八區,-480分鐘。
4:日期物件直接相減,返回的是兩個時間的毫秒差

<body>
   
<script>
    //1 Date作爲工具方法直接呼叫。
    var date = Date();
    console.log (typeof date);//string
    console.log (date);//Thu Aug 06 2020 09:53:57 GMT+0800 (中國標準時間)

    // 2:Date作爲建構函式使用。
    var date = new Date();
    console.log (typeof date);//object
    console.log (date);//Thu Aug 06 2020 09:55:46 GMT+0800 (中國標準時間)
    var date = new Date("2020/10/10 10:10:10");
    console.log (typeof date);//object
    console.log (date);//Thu Aug 06 2020 09:55:46 GMT+0800 (中國標準時間)

    // 3:靜態方法。
    var now = Date.now();
    console.log (typeof now);//number
    console.log (now);//1596679208271
    var date = Date.parse("2020/10/10 10:10:10");
    console.log (typeof date);//number
    console.log (date);//1602295810000

    //4:實體方法
    var date = new Date();
    //to 類
    console.log (date.toString());//Thu Aug 06 2020 10:08:53 GMT+0800 (中國標準時間)
    console.log (date.toLocaleString());//2020/8/6 上午10:09:25
    console.log (date.toLocaleDateString());//2020/8/6
    console.log (date.toLocaleTimeString());//上午10:10:54
    console.log (date.toISOString());//2020-08-06T02:11:52.546Z
    console.log (date.toUTCString());//Thu, 06 Aug 2020 02:11:52 GMT
    console.log ("----------------");
    //get 類
    console.log (date.getDay());//4: 周4

    console.log (date.getFullYear());//2020
    console.log (date.getMonth());//8月:[0-11]
    console.log (date.getDate());//6號:6

    console.log (date.getHours());//10
    console.log (date.getMinutes());//16
    console.log (date.getSeconds());//17
    console.log (date.getMilliseconds());//123

    console.log (date.getTimezoneOffset());//-480  480分鐘的時差
    console.log (date.getTime());//1596680161124
    console.log (Date.now());//1596680161128

    //set 設定日期物件的屬性
    date.setDate(6);//設定到本週日
    console.log (date.toLocaleString());
    console.log (date.getDay());//0


</script>
</body>
<body>
<!--
    1:將當前系統時間轉換爲指定格式的時間字串。
        格式:xxxx年xx月xx日 星期x xx時xx分xx秒xxx毫秒
    2:計算當前時間距離2021-1-1還有多少天?
-->
<script>
    /**
     * 對指定的日期date進行pattern格式的字串格式化
     * @param date
     * @param pattern
     */
    function formatDate(date,pattern) {
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var date1 = date.getDate();

        var week = date.getDay();

        var hours = date.getHours();
        var minutes = date.getMinutes();
        var seconds = date.getSeconds();
        var milliseconds = date.getMilliseconds();

        var result = year+"年"+month + "月"+date1+"日"+" " +  toWeekStr(week) + " " + hours +"時"+minutes+"分"+seconds+"秒"+milliseconds+"毫秒";

        return result;
    }

    //根據day的值返回對應的星期幾的字串
    function toWeekStr(day) {
        var weeks = ["日","一","二","三","四","五","六"];
        return "星期"+weeks[day];
    }

    var date = new Date();
    console.log (formatDate(date));

    //返回兩個日期物件的天數的間隔。向上取整。
    function intervalDays(minDate,maxDate) {
        // var minTime = minDate.getTime();
        // var maxTime = maxDate.getTime();
        //兩個時間的毫秒的時間差。
        // var interval = maxTime-minTime;
        //日期物件直接相減,返回的是兩個時間的毫秒差
        var interval = maxDate-minDate;
        return Math.ceil(interval/dayMillis());
    }

    //一天的毫秒數
    function dayMillis() {
        return 24*60*60*1000;
    }

    console.log (intervalDays(new Date(),new Date("2021-1-1")));

</script>
</body>

3 String物件簡介

String 物件是js的內建物件。
是js的三大包裝物件之一。 Number、Boolean、String
1:工具方法使用。將任意型別轉換爲字串。
2:建構函式:建立字串物件。
3: String物件提供了大量的用於操作字串範例的方法。

<body>
<script>
   // 1:工具方法使用。將任意型別轉換爲字串。
   console.log (String({}));//[object Object]
   var obj = {}
   console.log (obj.toString());//[object Object]

   // 2:建構函式:建立字串物件。
   var str1 = new String("abc");
   var str2 = "abc";
   console.log (typeof str1);//object
   console.log (typeof str2);//string

</script>
</body>

4 String物件的建立方式

字串物件的建立方式:
1:建構函式式。 **
2:字面量直接賦值。基本數據型別string,但是當我們需要將它當物件使用的時候,直接賦值的變數會被轉換爲物件使用。

<body>
<script>
    // 1:建構函式式。
    var str = new String("abc");
    console.log (typeof str);//object
    // 2:字面量直接賦值
    var str1 = "abc";
    console.log (typeof str1);//string
    //下面 下麪的程式碼"abc"會隱式轉換爲物件。
    console.log ("abc".charAt(1));//6

    //會將基本數據型別的1.使用Number建構函式轉換爲Object物件。
    (1).toFixed();
</script>
</body>

5 String物件的存取方式-類陣列方式

String:字串型別。
字串物件是若幹個字元的集合。
**字串物件的底層實現:底層使用字元陣列來儲存字元物件中的所有的字元。
字串物件不是陣列。不能使用陣列的實體方法。
但是js還給字串物件提供了一些類似於陣列的存取方式來存取字串。
類陣列的存取方式:
1: 可以使用下標來存取字串中的所有的字元。0序的。自然順序。
2:字串也有長度的屬性,length,代表了字元的個數。
3: 可以使用基本的for回圈,像遍歷陣列一樣的去遍歷字串中的字元。
4:不能使用delete 來刪除字元。也不能像陣列一樣的方式來修改字元。
5:不能使用陣列特有的實體方法。
***總結:雖然字串底層使用了陣列,可以使用某些類陣列的操作去操作字串
但是不建議使用這樣的方式去存取字串。應該用它特有的方式去存取。

<body>
<script>
   var str = "abc";
   //字元陣列的方式存取
   console.log (str[0]);//a
   console.log (str.length);//3
   for (let i = 0; i < str.length; i++) {
       console.log (str[i]);
   };

   //delete str[0];  不能刪除
   // str[0] = "A"; 不能修改
   console.log (str);
   // str.reverse();
</script>
</body>

6 String的遍歷

字串物件的遍歷:
1: 使用基本的for回圈,類似於遍歷陣列
2:for in
3:for of
4: 使用字串的實體方法。charAt(pos) 獲得當前物件上的指定位置的字元

<body>
<script>
    var str = "abcdefg";
    //1
    for (let i = 0; i < str.length; i++) {
        var ch = str[i];
        console.log (ch);
    }
    console.log ("--------1---------");

    // 2:for in  i 代表了字元的序號。
    for (var i in str) {
        var ch = str[i];
        console.log (ch);
    }
    console.log ("--------2---------");
    // 3:for of
    for (var ch of str) {
        console.log (ch);
    }
    console.log ("--------3---------");
    // 4:charAt(pos)
    for (let i = 0; i < str.length; i++) {
        var ch = str.charAt (i);
        console.log (ch);
    }
</script>
</body>

7 String的特點

***** String的特點:
1:底層實現使用字元陣列。
2:字串物件具有不可改變的特性。字串物件一旦建立,就不能被修改了。
所有看似對字串物件的修改,都會導致新的字串物件的生成。
缺點:如果不斷的去修改一個字串物件,那麼會在記憶體中生成大量不在使用的字串物件。會造成記憶體的浪費。
優點:安全。具有隻讀屬性。

<body>
<script>
   var num = 1;
   //傳值
   var num1 = num;
   num1 = 2;
   console.log (num);//1

   var val1 = new Number(1);
   var val2 = val1;
   val2 = 2;
   console.log (val1);

   var str = "abc";
   var str1 = str;
   str1 = str1 + "d";
   console.log (str1);//abcd
   console.log (str);//abc
</script>
</body>

8 String的方法

String的屬性:
1:length:字串物件中的字元的個數。一個大於等於0的值。
空字串"" 的長度就是0. 也是一個很有地位的字串物件。
String的靜態方法。
** String.fromCharCode(code) 將code整數值,轉換爲該值所對應的字元。
提示:notice 因爲字串物件具有不可改變的特性。
所以大部分的實體方法,操作當前範例物件,返回值往往是操作之後的結果。
而當前物件往往不發生改變。
String的實體方法:
**charAt(pos) 返回在指定位置的字元。
**charCodeAt(pos) 返回在指定的位置的字元的 Unicode 編碼。
concat(str) 連線字串 返回連線之後的字串物件。
**indexOf(searchStr,pos?) 檢索子字串。找到返回索引,否則返回-1.支援從指定的位置開始搜尋
lastIndexOf(searchStr,pos?) : 檢索子字串.從後往前找。
**replace(oldStr,newStr): 子串替換
**slice(start? , end?):提取字串的片斷,並在新的字串中返回被提取的部分。
substr(start,length ?): 從什麼位置開始,擷取length個。
**substring(start,end?) : 基本和slice一致,只是不支援負索引。
**split(separtor): 使用指定的分隔符將當前字串物件進行切割。切割後的內容以字串陣列返回。 如果分隔符爲空字串,那麼就是將字串轉換爲字元陣列的功能。支援正則。
**toLowerCase() 把字串轉換爲小寫。
**toUpperCase() 把字串轉換爲大寫。
**endsWith(suffix,pos?): 是否以指定的內容結尾。返回boolean值。
**startWith(prefix,pos?): 是否以指定的內容開頭。返回boolean值。

<body>
<script>
   //2 靜態方法
   for (let i = 0; i <128 ; i++) {
       var ch = String.fromCharCode(i);
       document.write(ch);
       if(i%100===0)
           document.write("<br>");
   }
   // 實體方法
   var str = "123456789你";
   console.log (str.charAt(5));//6
   var number = str.charCodeAt(9);
   console.log (number);
   console.log (String.fromCharCode(20320));//你

   var concat = str.concat("真壞");
   console.log (str);//123456789你
   console.log (concat);//123456789你真壞

   var index = concat.indexOf("你真壞");
   console.log (index);//9

   str = "1_2_3_4_5";
   var res = str.replace("_","-");
   console.log (res);
   console.log (str);

   str = "1_2_3_4_5";

   function replace(str,oldStr,newStr) {
       var index = str.indexOf(oldStr);
       while(index >=0){
           str = str.replace(oldStr,newStr);
           index = str.indexOf(oldStr);
       }
       return str;
   }
   var result = replace(str,"_","-");
   console.log (result);

   var str = "123456789你";
   console.log (str.slice(2,5));//345
   console.log (str.slice(2));//3456789你
   console.log (str.slice());//123456789你
   console.log (str.slice(-1));//你
   console.log (str.slice(-4,-1));//789

   console.log (str.substring(3));//456789你
   console.log (str.substr(3));//456789你
   console.log (str.substr(3,3));//456

   str = "1_2_3_4_5";
   console.log (str.split("_"));
   console.log (str.split(""));

   str = "hello.jpg";
   console.log (str.endsWith(".jpg"));//true
   console.log (str.startsWith("he"));//true

</script>
</body>
練習
<body>
<!--
    1:隨機得到一個任意長度的字串。只能包含大小寫字元。
    2:從上述方法得到的隨機字串中,將大寫字元和小寫字元分離出來,儲存到一個二維陣列中。二維陣列中包含了2個一維陣列,一個存大寫字元,一個存大寫字元。
    返回二維陣列。
    3:統計一個隨機字串中,某個字元出現的個數。
    4:任意字串實現翻轉。
-->
<script>
    //1
    function createStr(length) {
        //使用回圈產生length個隨機字元。連線返回。
        var str = "";
        for (let i = 0; i <length ; i++) {
            //得到一個隨機的大寫字元
            var ch = getUpperChar();
            //隨機大小寫累加
            str += random(0,2) === 0 ? ch : ch.toLowerCase() ;
        }
        return str;
    }
    //得到一個隨機的大寫字元
    function getUpperChar() {
        const MIN_CODE = 65;//A
        const MAX_CODE = 65+26;
        var code = random(MIN_CODE,MAX_CODE);
        return String.fromCharCode(code);
    }
    function random(min,max) {
        return ~~(Math.random()*(max-min)+min);
    }

    console.log (createStr(10));
    //10-35直接的一個隨機值
    // console.log ((~~(Math.random () * (36 - 10) + 10)).toString (36));////a-z
    
    //2
    function strToArray(str) {
        const UPPER = 0;
        const LOWER = 1;
        var arr = [[],[]];
        //遍歷字串,判斷,新增
        for (let i = 0; i < str.length; i++) {
            var ch = str.charAt(i);
            //如果ch是大寫的。
            if(isUpperChar(ch)){
                arr[UPPER].push(ch);
                continue;
            }
            arr[LOWER].push(ch);
        }
        return arr;
    }

    function isUpperChar(ch) {
        return ch >="A" && ch <="Z";
    }

    var str = createStr(10);
    console.log (str);
    var array = strToArray(str);
    console.log (array);

    //遍歷,這個比對,計數器記錄,返回計數器。
    function counerChar(str,ch) {
        var arr = str.split(ch);
        console.log (arr);
        return arr.length - 1;
    }
    var str = "aaaaa";
    var counter = counerChar(str,"a");
    console.log (counter);

    //翻轉字串
    function reverse(str) {
        //鏈式
        return str.split("").reverse().join("");
    }

    str = "123456789";
    console.log (reverse(str));
    
</script>
</body>

9 String的方法2

String的其他的實體方法:
** 1:trim() :刪除當前字串中的前導和後導空白字元。
2: padStart():
3: padEnd():
4: repeat():

<body>
<script>
    var str = "          a  bc   ";
    var result = str.trim();
    console.log (str);//沒有變化
    console.log (result);
    console.log (result.length);
    
    str  = "a";
    var str1 = str.padStart(10,"*");//*********a
    console.log (str1);

    var s = str.padEnd(10,"*");
    console.log (s);//a*********

    var repeat = str.repeat(5);
    console.log (repeat);//aaaaa

</script>
</body>

10 Global物件

Global物件。全域性物件。是一個假象的物件。不存在。
在js中規定,所有的方法都要隸屬於某一個物件。在js中存在一些全域性函數
直接使用的函數,作爲工具方法來使用的。
隨着js的發展,將一些全域性函數歸給了window物件和Number物件。
1:isNaN(num):用來判斷實參是否是NaN的,如果是返回true,否則false。
2: isFinite(num): 用來判斷實參是否是有窮數。如果是返回true,否則false。
3: parseInt(num, radix?): 將實參解析爲整數,解析不成功,返回NaN。
4: parseFloat(num): 解析浮點數
5: 在進行網路數據傳輸的過程中,某些數據是不能直接進行傳輸的,必須要經過
編碼的轉換。通過2個方法進行轉換。
編碼方法: encodeURI 、encodeURIComponent.
encodeURI : 會對中文、空格等字元進行編碼。url資訊中的冒號,斜槓等不進行編碼。
encodeURIComponent:在encodeURI 的基礎上,還會對 冒號和 斜槓等進行編碼。
***編碼:從明文—密文。
***解碼:從密文—明文。
decodeURI: 用來解碼encodeURI 編碼的數據。
decodeURIComponet:用來解碼 encodeURIComponent 編碼的數據。

使用率比較高的一對編碼解碼方法:encodeURIComponent、decodeURIComponet
一般編碼只對提交的數據部分進行編碼。
*** 6:eval(str): 該方法是一個非常強大的方法。可以將實參的內容解析爲js程式碼執行。
全域性屬性: NaN、Infinity、-Infinity、Array、Math、Number、String、Boolean、Date

<body>
<script>
    var num = "1"/"a";
    console.log (isNaN(num));//true

    console.log (isFinite(1));//true
    console.log (isFinite(Infinity));//false

    console.log (parseInt("23",8));//19
    console.log (parseFloat("12.11111111aaa"));//12.11111111

    var url = "https://news.163.com/?name=小剛&pwd=12 3456";
    //https://news.163.com/?name=%E5%B0%8F%E5%88%9A&pwd=12%203456
    console.log (encodeURI(url));
    url = "https://news.163.com/?name=%E5%B0%8F%E5%88%9A&pwd=12%203456";
    console.log (decodeURI(url));
    // https%3A%2F%2Fnews.163.com%2F%3Fname%3D%E5%B0%8F%E5%88%9A%26pwd%3D12%203456
    console.log (encodeURIComponent(url));
    url = "https%3A%2F%2Fnews.163.com%2F%3Fname%3D%E5%B0%8F%E5%88%9A%26pwd%3D12%203456";
    console.log (decodeURIComponent(url));

    var str = "var value = 10";
    eval(str);
    str = "1*2*3*4*5";
    console.log (eval(str));//120
    console.log (value);//10
</script>
</body>