JavaScript課程——Day07(物件簡介、Math物件、時間物件、字串物件)

別動我咖哩發表於2021-04-26

1、物件簡介

在javaScipt中,一切皆為物件或者皆可以被用作物件

  • 宿主物件:window,document
  • 內建物件:Number  String  Boolean  Array陣列  Object  Function  Error錯誤物件  Date時間物件 RegExp正則
  • 自定義物件:new XX();

 

包裝物件:

// 真正的物件
var obj = {
    name: 'zs', // 屬性
    age: 3,
    fn: function () { // 方法
        console.log(this.name);
    }
}
console.log(obj.name); // 列印屬性
obj.fn(); // 呼叫方法

 

  • 按照規則,基本型別沒有屬性和方法,只有物件有屬性和方法
  • 包裝物件存在的意義:它是對基本型別說的,因為基本物件不是物件,但是它又要表現的像一個物件,就用包裝物件來模擬
// 包裝物件,當str呼叫length屬性的時候,包裝物件就過來了,它提供了length屬性,接著,包裝物件就消失了
console.log(str.length);
console.log(str.charAt(2));

 

面試題:

// 面試題
var str = '平頭哥';
str.ab = 'abcd'; // 當str呼叫ab屬性的時候,它的包裝物件就過來了,在這個包裝物件下面,新增了ab屬性,接著,包裝物件就消失了
console.log(str.ab); // undefined   讀取ab屬性的時候,包裝物件就又過來了(此時過來的包裝物件,不是上次的包裝物件),它下面沒有ab屬性,所以undefined


var obj = {
    name: 'ls'
}
obj.ab = 'abcd';
console.log(obj.ab); // abcd

 

2、Math物件

// 常用數學方法
console.log(Math.floor(3.999)); // 3 向下取整 去掉小數部分
console.log(Math.ceil(3.001)); // 4 向上取整 只要有小數就進位
console.log(Math.round(3.14159)); // 3 四捨五入
console.log(Math.abs(-100)); // 100 絕對值
console.log(Math.max(1, 2, 36, 9)); // 36
console.log(Math.min(1, 2, 36, 9)); // 1
console.log(Math.pow(2, 10)); // 2的10次方  1024
console.log(Math.pow(3, 2)); // 3的平方 9
console.log(Math.sqrt(60)); // 開根號 7.745966692414834

 

隨機數

  • 隨機數:大於等於0,小於1的一個數
  • 適用場景:點名器、抽獎、驗證碼
// 公式推理
// 從3--8 或 2--6隨機找一個數
// 3--8:3 4 5 6 7 8:
// 6個:8-3+1 --->  6 * 隨機數 = 0--5.9999999 + 最小數 --> 3--8.99999  向下取整 3--8

// 2--6:2 3 4 5 6:
// 5個:6-2+1   ---> 5*隨機數 = 0 --4.9999999 + 最小數 --> 2--6.99999 向下取整 2--6

// ---------------------------------
// 隨機數公式
// 1、大減小加1
// 2、乘以隨機數
// 3、加上最小數
// 4、向下取整

// 封裝
function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

for (var i = 0; i < 20; i++) {
    console.log(getRandom(10, 50));
}

 

抽獎案例:

<body>
    <div id="box">請抽獎</div>
    <button>抽獎</button>

    <script>
        var arr = ['謝謝惠顧', '一等獎:一百萬', '謝謝惠顧', '二等獎:二百萬', '謝謝惠顧', '二等獎:1 毛錢', '三等獎:負一百萬', '謝謝惠顧', '三等獎:送你去泰國'];

        var box = document.getElementById('box');
        var btn = document.querySelector('button');
        var timer = null;


        btn.onclick = function () {

            if (this.innerText === '抽獎') {
                timer = setInterval(function () {
                    var index = getRandom(0, arr.length - 1); // 從陣列中隨機取出一個下標
                    box.innerText = arr[index]; // 取出陣列中的某一項
                }, 50);

                this.innerText = '停止';
            } else {
                clearInterval(timer);
                this.innerText = '抽獎';
            }
        }

        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min + 1) + min);
        }
    </script>
</body>

 

3、時間物件

  3.1、建立時間

// new Date()建立的時間,返回的都是一個物件

// 沒有引數
var d = new Date(); // 建立的是當前電腦此時此刻的時間
console.log(typeof d); // 'object'
console.log(d.toLocaleString());


// 有引數
var d = new Date(2030, 10, 12, 13, 12, 10); // 傳入數字:年 月 日 時 分 秒  (月:0-11代表1--12)

var d = new Date('2022-12-12 10:12:12'); // 傳入字元 月為正常的月
var d = new Date('2022/11/12 10:12:12'); // 傳入字元
var d = new Date('2022,11,13 10:12:12'); // 傳入字元
console.log(d.toLocaleString());

 

  3.2、時間字串表示

var d = new Date();

console.log(d);

// 本地時間
console.log(d.toLocaleString()); // 2021/4/26下午7:21:48
console.log(d.toLocaleDateString()); // 2021/4/26
console.log(d.toLocaleTimeString()); //下午7:21:48

// 返回英文狀態的時間
console.log(d.toString()); // Mon Apr 26 2021 19:21:48 GMT+0800 (中國標準時間)
console.log(d.toDateString()); // Mon Apr 26 2021
console.log(d.toTimeString()); // 19:21:48 GMT+0800 (中國標準時間)

 

  3.3、獲取時間某一部分

var d = new Date(); // d是一個物件,它裡面有很多的屬性和方法

var year = d.getFullYear(); //
var month = d.getMonth(); // 月 0--11 代表 1--12
var date = d.getDate(); //
var week = d.getDay(); // 星期 0--6 代表 週日--週六

var h = d.getHours(); //
var m = d.getMinutes(); //
var s = d.getSeconds(); //
var ms = d.getMilliseconds(); // 毫秒

console.log(year, month, date, week, h, m, s, ms);

 

  3.4、設定時間某一部分

var d = new Date();
// 有獲取的方法,就有對應設定的方法

d.setFullYear(2025); // 設定年
d.setMonth(15); // 設定月 月要加1   具有容錯的能力
d.setDate(36); // 設定日

console.log(d.toLocaleString());

 

  3.5、時間戳

  時間戳:返回的是1970年1月1日零時到現在經過的毫秒數

// 方式一
var d = new Date();
console.log(d.getTime()); // 1619418442234

// 方式二(IE8及以下不支援)
console.log(Date.now()); // 1619418442234

 

  倒數計時案例:

<body>
    <h1>距五一放假還有:xx天xx小時xx分xx秒</h1>

    <script>
        var h1 = document.querySelector('h1');
        var future = new Date(2021, 4, 1, 0, 0, 0); // 未來時間
        auto();
        var timer = setInterval(auto, 1000);

        function auto() {
            // 兩個物件相減,都轉成數字(時間戳)
            var now = new Date(); // 當前時間

            var d = Math.floor((future - now) / 1000); // 毫秒轉成秒

            if (d <= 0) {
                clearInterval(timer);
                h1.innerText = '放假了';
                return;
            }

            var date = Math.floor(d / 86400); //
            var h = Math.floor(d % 86400 / 3600); // 小時
            var m = Math.floor(d % 3600 / 60); // 分鐘
            var s = d % 60;

            h1.innerText = '距五一放假還有:' + date + '' + h + '小時' + m + '' + s + '';
        }
    </script>
</body>

 

  3.6、moment.js

  官網:http://momentjs.cn/

// 建立時間
var d = moment(); // 建立當前時間
var d = moment('2023-12-12 10:12:03'); // 建立當前時間

// -------------------------------

// 格式化時間
console.log(d.format('YYYY年MM月DD日 HH:mm:ss'));
console.log(d.format('YYYY')); //
console.log(d.format('MM')); //

// -----------------------------------

// 之前和之後
// 格式:時間.subtract(減少的數量, 時間的鍵);
// 格式:時間.add(增加的數量, 時間的鍵);
var d = moment().subtract(1, 'months');
console.log(d.format('YYYY年MM月DD日 HH:mm:ss'));

var d = moment().add(1, 'months');
console.log(d.format('YYYY年MM月DD日 HH:mm:ss'));

 

4、字串物件

  4.1、建立

var str1 = '平頭哥'; // 推薦   字面量
console.log(str1, typeof str1);

var str2 = String('平頭妹');
console.log(str2, typeof str2);

var str3 = new String('平頭弟'); // 不建議用,認識
console.log(str3, typeof str3); // "object"

 

  4.2、長度,下標,charAt

var str = '我來優就業學習 web 前端';

// 字串.length   長度
console.log(str.length); // 14

// 字串.charAt(下標)   返回下標對應的字元
// 字串[下標]    IE7及以下不支援
console.log(str[1]); //
console.log(str.charAt(2)); //

// 字串.charCodeAt(下標);  返回指定位置的字元的 Unicode 編碼。這個返回值是 0 - 65535之間的整數。
// 將文字轉成編碼
console.log(str.charCodeAt(1)); // 26469
console.log(str.charCodeAt(2)); // 20248

// 將編碼轉成文字
console.log(String.fromCharCode(26469, 20248)); // 來優

 

  4.3、indexOf和lastIndexOf

  • 字串.indexOf(要查詢的字元[,查詢的起始位置];        從前向後查詢
  • 字串.lastIndexOf(要查詢的字元[,查詢的起始位置]);      從後向前查詢

  返回要查詢的字元在字串中首次出現的位置,如果沒有,返回-1

  如果沒有第二個引數(查詢的起始位置),從下標0開始查詢

var str = 'abcdeabfabg';
console.log(str.indexOf('a')); // 0
console.log(str.indexOf('a', 1)); // 5
console.log(str.indexOf('A')); // -1
console.log(str.indexOf('ab', 1)); // 5

console.log(str.lastIndexOf('a')); // 8
console.log(str.lastIndexOf('ab')); // 8

 

案例:封裝一個函式,用於字元去重

console.log(fn('abaabbccdc'));
console.log(fn('aaaaa'));

function fn(str) {
    var newStr = '';
    for (var i = 0; i < str.length; i++) {
        var v = str[i]; // 原字串中的每一個字元

        if (newStr.indexOf(v) === -1) { // 等於-1,則證明newStr裡面沒有這個字元
            newStr += v;
        }
    }
    return newStr; // 去重以後的字串返回
}

 

  4.4、擷取

  • 字串.slice(起始下標,結束下標)
// 字串.slice(起始下標, 結束下標);     推薦使用
// 獲取字串中起始下標到結束下標之間的字元
// 第一個引數不能為負,第二個引數如果為負,則同長度相加

var str = 'abcdefg';
console.log(str.slice()); // abcdefg
console.log(str.slice(2)); // cdefg
console.log(str.slice(2, 5)); // cde  不包含第二個引數
console.log(str.slice(2, -2)); // cde  第二個引數為負,則和長度相加

 

  • 字串.substring(起始下標,結束下標)
// 字串.substring(起始下標, 結束下標);
var str = 'abcdefg';
console.log(str.substring()); // abcdefg
console.log(str.substring(2)); // cdefg
console.log(str.substring(2, 5)); // cde  不包含第二個引數
console.log(str.substring(5, 2)); // cde  如果第二個引數比第一個小,則交換位置
console.log(str.substring(2, -2)); // ab  負數同0

 

  • 字串.substr
// 字串.substr(起始下標, 擷取的個數);
var str = 'abcdefg';
console.log(str.substr()); // abcdefg
console.log(str.substr(2)); // cdefg
console.log(str.substr(2, 3)); // cde

 

  4.5、轉大小寫

  • 字串.toUpperCase();         轉大寫
  • 字串.toLowerCase();    轉小寫
var str = 'abc';
console.log(str.toUpperCase()); // ABC

var str2 = 'ABC';
console.log(str2.toLowerCase()); //abc

 

  4.6、split

// 字串.split(引數); 
// 將字串以引數拆分成陣列
var str = '2020-11-12'; // ['2020', '11', '12']
console.log(str.split('-')); // ["2020", "11", "12"]
console.log(str.split()); // ["2020-11-12"]
console.log(str.split('')); // ["2", "0", "2", "0", "-", "1", "1", "-", "1", "2"]

// ------------------------------
// 陣列.join(引數);
// 將陣列以引數拼接成字串
var arr = ['2020', '11', '12'];
console.log(arr.join('-')); // '2020-11-12'
console.log(arr.join()); // '2020,11,12'
console.log(arr.join('')); // '20201112'

 

  4.7、replace

// 字串.replace(被替換的字元, 新的字元)
// 返回替換以後的結果,不影響原字串

var str = '老王吃飯了';
var v = str.replace('老王', '張新昊');
console.log(v); // 張新昊吃飯了
console.log(str); // 老王吃飯了

 

  4.8、trim

// 字串.trim(); 去除字串左右空格
// IE9及以上支援,IE8及以下,我們用正則來解決
var str = '    平頭哥    ';

console.log(str);
console.log(str.trim());

相關文章