1. 程式人生 > 其它 >P1111 修復公路 題解

P1111 修復公路 題解

一、內建物件

1、JavaScript 中的物件分為3種:自定義物件、內建物件、瀏覽器物件

2、前兩種物件是JS基礎內容,屬於ECMAScript;第三個瀏覽器物件屬於我們JS獨有的,我們JS API講解

3、內建物件就是指JS 語言自帶的一些物件,這些物件供開發者使用,並提供了一些常用的或是最基本而必要的功能(屬性和方法)

4、內建物件最大的優點就是幫助我們快速開發

5、JavaScript提供了多個內建物件:Math、Date、Array、String等

二、查文件

(一)

1、學習一個內建物件的使用,只要學會其常用成員的使用即可,我們可以通過查文件學習,可以通過MDN/W3C來查詢

2、Mozilla 開發者網路(MDN)提供了有關開發網路技術(Open Web)的資訊,包括HTML、CSS和全球資訊網及HTML5應用的API

3、MDN:https://developer.mozilla.org/zh-CN/

(二)如何學習物件中的方法

1、查閱該物件的功能

2、檢視裡面引數的意義和型別

3、檢視返回值的意義和型別

4、通過 demo 進行測試

三、Math物件

(一)Math 概述

1、Math 物件不是建構函式,它具有數學常數和函式的屬性和方法。跟數學相關的運算(求絕對值,取整,最大值等)可以使用Math 中的成員。

Math.PI          //圓周率

Math.floor ()        //向下取整

Math.ceil ()          //向上取整

Math.round ()         //四捨五入  就近取整      注意:-3.5   結果是  -3   其它數字都是四捨五入 但是 .5 特殊  它往大了取

Math.abs ()          //絕對值

Math.max () /Math.min ()    //求最大和最小值

(二)隨機數方法 random()

1.Math物件隨機數方法  random()  返回一個隨機的小數  0 =< x < 1 2.這個方法裡面不跟引數 3.程式碼驗證         console.log(Math.random()); 4.我們想要得到兩個數之間的隨機整數  並且  包含這2個整數         // Math.floor(Math.random() * (max - min + 1)) + min;         function getRandom(min, max) {             return Math.floor(Math.random() * (max - min + 1)) + min;         }         console.log(getRandom(1, 10)); 5.隨機點名         var arr = ['張三', '張三丰', '張三瘋子', '李四', '李思思', '王五'];         console.log(arr[getRandom(0, arr.length - 1)]);

四、日期物件

(一)Date 概述

1、Date 物件和Math 物件不一樣,它是一個建構函式,所以我們需要例項化後才能使用

2、Date 例項用來處理日期和時間

(二)Date()方法的使用

1、獲取當前時間必須例項化

var now = new Date();

console.log(now);

2、Date()建構函式的引數

如果括號裡面有時間,就返回引數裡面的時間。例如日期格式字串為 '2019-5-1' ,可以寫成new Date('2019-5-1'),或者 new Date('2019/5/1')

 (三)日期格式化

我們想要 2019-8-8 8:8:8格式的日期,要怎麼辦?

需要獲得日期指定的部分,所以我們要手動的得到這種格式。

方法名 說明 程式碼
getFullYear() 獲取當年 dObj.getFullYear()
getMonth() 獲取當月(0-11) dObj.getMonth()
getDate() 獲取當天日期 dObj.getDate()
getDay() 獲取星期幾(週日0到週六6) dObj.getDay()
getHours() 獲取當前小時 dObj.getHours()
getMinutes() 獲取當前分鐘 dObj.getMinutes()
getSeconds() 獲取當前秒鐘 dObj.getSeconds()

 

 

 

 

 

 

 

 

 

 (四)獲取日期的總的毫秒形式

1、Date 物件是基於1970年1月1日(世界標準時間)起的毫秒數

2、我們經常利用總的毫秒數來計算時間,因為它更精確

// 獲取Date總的毫秒數(時間戳) 不是當前時間的毫秒數 而是距離1970年1月1日過了多少毫秒數         // 1.通過   valueOf()   getTime()         var date = new Date();         console.log(date.valueOf()); //就是 我們現在時間 距離1970.1.1 總的毫秒數         console.log(date.getTime());
        //2.簡單的寫法(最常用的寫法)         var date1 = +new Date(); // +new Date()  返回的就是總的毫秒數         console.log(date1);
        //3.H5 新增的 獲得總的毫秒數         console.log(Date.now());

五、陣列物件

(一)陣列物件的建立

1、建立陣列物件的兩種方式:

(1)字面量方式

(2)new Array()

(二)檢測是否為陣列

 //檢測是否為陣列         //1.instanceof  運算子 它可以用來檢測是否為陣列         var arr = [];         var obj = {};         console.log(arr instanceof Array);         console.log(obj instanceof Array);

 

        //2.Array.isArray(引數)   H5新增的方法  ie9以上版本支援         console.log(Array.isArray(arr));         console.log(Array.isArray(obj)); //翻轉陣列         function reverse(arr) {             // if (arr instanceof Array) {             if (Array.isArray(arr)) {                 var newArr = [];                 for (var i = arr.length - 1; i >= 0; i--) {                     newArr[newArr.length] = arr[i];                 }                 return newArr;             } else {                 return ' error 這個引數要求必須是陣列格式 [1,2,3]'             }         }         console.log(reverse([1, 2, 3]));         console.log(reverse(1, 2, 3)); (三)新增刪除陣列元素的方法
方法名 說明 返回值
push(引數1...) 末尾新增一個或多個元素,注意修改原陣列 並返回新的長度
pop() 刪除陣列最後一個元素,把陣列長度減1,無引數、修改原陣列 返回它刪除的元素的值
unshift(引數1...) 向陣列的開頭新增一個或更多元素,注意修改原陣列 並返回新的長度
shift() 刪除陣列的第一個元素,陣列長度減1,無引數、修改原陣列 並返回第一個元素的值
                 
      //新增刪除陣列元素方法         // 1. push() 在我們陣列的末尾 新增一個或者多個數組元素  push 推         var arr = [1, 2, 3];         // arr.push(4, 'pink');         console.log(arr.push(4, 'pink'));         console.log(arr);         // (1)push 是可以給陣列追加新的元素         // (2)push() 引數直接寫 陣列元素就可以了         // (3)push完畢之後,返回的結果是 新陣列的長度         // (4)原陣列也會發生變化
        // 2.unshift 在我們陣列的開頭 新增一個或者多個數組元素         // arr.unshift('red', 'purple');         console.log(arr.unshift('red', 'purple'));         console.log(arr);         // (1)unshift 是可以給陣列前面追加新的元素         // (2)unshift() 引數直接寫 陣列元素就可以了         // (3)unshift完畢之後,返回的結果是 新陣列的長度         // (4)原陣列也會發生變化
        //3.pop() 它可以刪除陣列的最後一個元素         // arr.pop();         console.log(arr.pop());         console.log(arr);         // (1)pop 是可以刪除陣列的最後一個元素 記住一次只能刪除一個元素         // (2)pop() 沒有引數         // (3)pop完畢之後,返回的結果是 刪除的那個元素         // (4)原陣列也會發生變化
        //4.shift() 它可以刪除陣列的最後一個元素         // arr.shift();         console.log(arr.shift());         console.log(arr);         // (1)shift 是可以刪除陣列的第一個元素 記住一次只能刪除一個元素         // (2)shift() 沒有引數         // (3)shift完畢之後,返回的結果是 刪除的那個元素         // (4)原陣列也會發生變化    (四)陣列排序
方法名 說明 是否修改原陣列
reverse() 顛倒陣列中元素的順序,無引數 該方法會改變原來的陣列 返回新陣列
sort() 對陣列的元素進行排序 該方法會改變原來的陣列 返回新陣列
                    //1.翻轉陣列         var arr = ['pink', 'red', 'blue'];         arr.reverse();         console.log(arr);
        //2.陣列排序(氣泡排序)         var arr1 = [3, 12, 33, 4, 5, 9];         arr1.sort(function(a, b) {             // return a - b; //升序的順序排列             return b - a; //降序的順序排列         });         console.log(arr1); (五)陣列索引方法
方法名 說明 返回值
indexOf() 陣列中查詢給定元素的第一個索引 如果存在返回索引號,如果不存在,則返回-1
lastIndexOf() 在陣列中的最後一個的索引 如果存在返回索引號,如果不存在,則返回-1 
   

 

 

 

//返回陣列元素索引號方法  indexOf(陣列元素)  作用就是返回該陣列元素的索引號 從前面開始查詢         // 它只返回第一個滿足條件的索引號         // 它如果在該數組裡面找不到元素,則返回的是 -1         // var arr = ['red', 'green', 'blue', 'pink'];//2         // var arr = ['red', 'green', 'blue', 'pink', 'blue'];//2         var arr = ['red', 'green', 'pink']; //-1         console.log(arr.indexOf('blue'));         //返回陣列元素索引號方法  lastIndexOf(陣列元素)  作用就是返回該陣列元素的索引號 從後面開始查詢         // var arr = ['red', 'green', 'blue', 'pink']; //2         var arr = ['red', 'green', 'blue', 'pink', 'blue']; //4         console.log(arr.lastIndexOf('blue')); (六)陣列轉換為字串
方法名 說明 返回值
toString() 把陣列轉換為字串,逗號分隔每一項 返回一個字串
join('分隔符') 方法用於把陣列中的所有元素轉換為一個字串 返回一個字串
                    // 1.toString()  將我們的陣列轉換為字串         var arr = [1, 2, 3];         console.log(arr.toString()); //1,2,3
        // 2.join(分隔符)         var arr1 = ['green', 'blue', 'pink'];         console.log(arr1.join()); //green,blue,pink         console.log(arr1.join('-')); //green-blue-pink         console.log(arr1.join('&')); //green&blue&pink (七)其他
方法名 說明 返回值
concat() 連線兩個或多個數組,不影響原陣列 返回一個新的陣列
slice() 陣列擷取slice(begin,end) 返回被擷取專案的新陣列
splice() 陣列刪除splice(第幾個開始,要刪除個數) 返回被刪除專案的新陣列 注意:這個會影響原陣列
     

 

 

slice() 和 splice() 目的基本相同,建議重點看 splice()

六、字串物件

 (一)基本包裝型別

1、為了方便操作基本資料型別,JavaScript還提供了三個特殊的引用型別:String、Number和 Boolean

2、基本包裝型別就是把簡單資料型別包裝成為複雜資料型別,這樣基本資料型別就有了屬性和方法

3、

// 下面程式碼有什麼問題

var str = 'andy'; console.log(str.length);   按道理基本資料型別是沒有屬性和方法的,而物件才有屬性和方法,但上面程式碼卻可以執行,這是因為js會把基本資料型別包裝為複雜資料型別,其執行過程如下:   // (1)把簡單資料型別包裝為複雜資料型別         var temp = new String('andy'); // (2)把臨時變數的值 給 str         str = temp; // (3)銷燬這個臨時變數         temp = null;  

 (二)字串的不可變

指的是裡面的值不可變,雖然看上去可以改變內容,但其實是地址變了,記憶體中新開闢了一個記憶體空間。

        var str = 'andy';         str = 'red';    // 當重新給 str 賦值的時候,常量 'andy' 不會被修改,依然在記憶體中    // 重新給字串賦值,會重新在記憶體中開闢空間,這個特點就是字串的不可變         // 由於字串的不可變,在大量拼接字串的時候會有效率問題         var str = '';         for (var i = 0; i < 10000000; i++) {             str += i;         }         console.log(str);  // 這個結果需要花費大量時間來顯示,因為需要不斷的開闢新的空間   (三)根據字元返回位置 字串所有的方法,都不會修改字串本身(字串是不可變的),操作完成會返回一個新的字串
方法名 說明
indexOf(要找的字元,開始的位置) 返回指定內容在原字串中的位置,如果找不到就返回-1,開始的位置是index 索引號
lastIndexOf() 從後往前找,只找第一個匹配的

 

 

 

 

 

(四)根據位置返回字元(重點)

方法名 說明 使用
charAt(index) 返回指定位置的字元(index 字串的索引號) str.charAt(0)
charCodeAt(index) 獲取指定位置處字元的ASCII碼(index索引號) str.charCodeAt(0)
str[index] 獲取指定位置處字元 HTML5、IE8+支援和charAt()等效

 

 

 

 

 

 

 

(五)字串操作方法(重點)

方法名 說明
concat(str1,str2,str3...) concat()方法用於連線兩個或多個字串。拼接字串,等效於+,+更常用
substr(start,length) 從start位置開始(索引號),length 取的個數,重點記住這個
slice(start,end) 從start位置開始,擷取到end位置,end取不到(它們兩都是索引號)
substring(start,end) 從start位置開始,擷取到end位置,end取不到,基本和slice相同,但是不接受負值