JS中的Math對象,數(shù)組舔涎,和Date對象

Math

Math對象是JS內(nèi)置對象脸候,提供了一些靜態(tài)的數(shù)學屬性和數(shù)學方法,使用時不用實例化讯屈。

  • 屬性:
    Math.E
    Math.LN2
    Math.LN10
    Math.LOG2E
    Math.LOG10E
    Math.PI
    Math.SQRT1_2
    Math.SQRT2
  • 方法:
  1. 四舍五入 round
    Math.round(0.1); //0
    Math.round(0.5); //1

對于 負值的運算結(jié)果不同蛋哭,體現(xiàn)在對于.5的處理

    Math.round(-1.1);//-1
    Math.round(-1.5); //-1
  1. 絕對值abs,最大參數(shù)max涮母,最小參數(shù)min
    abs方法返回參數(shù)值的絕對值
    Math.abs(1)//1
    Math.abs(-1) //1

max方法返回最大的參數(shù)谆趾,min方法返回最小的參數(shù)

    Math.max(1,2,3); //3
    Math.min(1,2,3); //1
  1. floor,ceil
    分別返回小于或者大于參數(shù)值的最大(小)整數(shù)
    Math.floor(3.999); //3
    Math.floor(-3.999); //-4

    Math.ceil(3.999); //4
    Math.ceil(-3.999); //-3
  1. pow,sqrt
    pow返回一個參數(shù)為底數(shù)叛本,第二個參數(shù)為冪的指數(shù)值
    sqrt方法返回參數(shù)的平方根沪蓬,如果參數(shù)為負值,返回NaN
    Math.pow(2,2); // 4
    Math.pow(2,3); // 8
    
    Math.sqrt(4); //2
    Math.sqrt(-4); //NaN
  1. random
    random方法返回0-1之間的一個偽隨機數(shù)来候,可能等于0跷叉,但是一定小于1
    通過組合使用random方法和floor或者ceil方法可以得到指定范圍內(nèi)的隨機整數(shù),示例:
    // 返回一個大于等于a,小于b之間的隨機整數(shù)
    function random(a,b) {
        return a + Math.floor(Math.random() * (b-a));
    }

利用定義得到的random()函數(shù)云挟,可以實現(xiàn)輸出一些指定格式的結(jié)果:

    // 返回一個大于等于a峡眶,小于b之間的隨機整數(shù)
    function random(a,b) {
        return a + Math.floor(Math.random() * (b-a));
    }

    // 得到一個隨機的字符串
    function randomStr(len) { //len為隨機字符串的長度
        var dict = '0123456789abcdefgihijklmnopqrstuvwxyz'; // 創(chuàng)建一個字符串,所有可能的字符取值
        var str = ''; // 要輸出的隨機字符串
        for (var i = 0; i < len; i ++) {
            str += dict[random(0,dict.length)];
            // 利用上面定義的random函數(shù)植锉,生成0到dict字符串的長度的隨機整數(shù)辫樱,作為下標,對應的字符即為輸出的字符俊庇,賦給str
        }
        return str;
    }
    var str = randomStr(8);//指定8位的字符串
    console.log(str);

    //得到一個隨機的IP地址 0.0.0.0 ~ 255.255.255.255
    function randomIP () {
        //同樣要利用定義好的random()
        var arr = [];
        for (var i = 0; i < 4; i ++) { //IP 4位狮暑,循環(huán)4次
            arr.push(random(0,256)); // 寫成255就不包括255了
        }
        return arr.join('.'); //返回.隔開的字符串
    }
    var IP = randomIP();
    console.log(IP);

數(shù)組

  • 數(shù)組的創(chuàng)建的多種方式
    var arr = new Array();
    使用構(gòu)造函數(shù)創(chuàng)建空數(shù)組,一般不使用辉饱,而是用字面量創(chuàng)建數(shù)組:
    var arr = [];
    在使用字面量創(chuàng)建數(shù)組的時候:
    無論傳入幾個參數(shù)搬男,都會把參數(shù)當做初始化內(nèi)容而不是長度,例如var arr = [5];即創(chuàng)建的新數(shù)組只有1項彭沼,為5缔逛。
    var arr = [5];
    console.log(arr.length); //1
    var arr2 = [5,6];
    console.log(arr2.length) //2

但是需要注意的是,進行數(shù)組創(chuàng)建的時候姓惑,不要帶多余的“褐奴,” 因為不同的瀏覽器解析結(jié)果不一致。例如:

    var arr = [1,2,3,]; //有多余的,
    console.log(arr.length); // 現(xiàn)代瀏覽器上結(jié)果為3于毙,但是在低版本的IE上是長度為4的數(shù)組敦冬,最后一項為undefined
  • 數(shù)組的索引
    數(shù)組的值可以通過下標來進行訪問,下標可以是自然數(shù)也可以是變量或者表達式唯沮,例如:
    var arr =[1,2,3,4];
    console.log(arr[0]); //1
    var i =1;
    console.log(arr[i]);//2
    console.log(arr[++i]);//3

數(shù)組也是對象脖旱,是一個特殊的對象,key為數(shù)值的對象介蛉。

  • 數(shù)組的基本操作
    var a = [1,2,3];
    a[3] = 4; // 增加新元素
    console.log(a); //[1,2,3,4]
    //使用delete刪除數(shù)組元素
    delete a[2];
    console.log(a[2]); //undefined  跟給a[2]賦值undefined相似萌庆,數(shù)組長度不會改變,也不會影響其他數(shù)據(jù)币旧。
    console.log(a.length); //4 數(shù)組長度不會改變
  • 棧方法pop()和push()
    var arr = [3,4,5];
    arr.push(100); //push里面?zhèn)鲄?    console.log(arr); //3,4,5,100
    arr.pop(); //pop不需要傳參
    console.log(arr); //3,4,5
  • 隊列方法 shift()和unshift()
    var arr =[1,2,3];
    arr.unshift(4);
    console.log(arr); //[4,1,2,3]
    arr.shift();
    console.log(arr);//[1,2,3]
  • 終極神器splice()
    splice方法可以一次性解決數(shù)組添加践险,刪除。傳入三個參數(shù)
    第一個參數(shù)為開始的位置佳恬, 第二個參數(shù)為想要刪除的長度捏境,第三個參數(shù)為想要添加的項目,也可以寫多個:
    var arr = [3,5,8,10];
    arr.splice(2,1);  // 刪除第2個元素
    console.log(arr); //[3,5,10]
    var arr1 = [3,5,8,10];
    arr1.splice(1,1,7,8,9); //在第2位開始,刪除1項毁葱,然后增加7,8,9三項
    console.log(arr1);//[3, 7, 8, 9, 8, 10]
    var arr2 = [3,5,8,10];
    arr2.splice(3,0,9); // 在第3項位置刪除0項垫言,即不刪除,然后插入9的一項
    console.log(arr2);//[3, 5, 8, 9, 10]
  • join方法
    將數(shù)組連接成字符串,可以選擇使用什么字符隔開每一項
    var arr = [1,2,3,4,5,6];
    //轉(zhuǎn)化為字符串
    var str1 = arr.join('|');
    console.log(str1); //1|2|3|4|5|6
    var str2 = arr.join(''); 
    console.log(str2); // 123456

數(shù)組跟字符串使用join("")和split("")可以互相轉(zhuǎn)換倾剿,使用對方的方法

  • concat() 連接數(shù)組筷频,會生成一個新數(shù)組蚌成,不會影響原數(shù)組
    var a = [1,2,3];
    var b = [4,5];
    console.log(a.concat(b)); //[1, 2, 3, 4, 5]
    console.log(a); // [1, 2, 3] 原數(shù)組不受影響
    console.log(b); //[4, 5]
  • reverse()方法用于將數(shù)組逆序,會修改原數(shù)組
   var arr = [1,2,3,4,5];
   arr.reverse();
   console.log(arr); //  [5, 4, 3, 2, 1] 會修改原數(shù)組
  • sort()
    sort方法在沒有參數(shù)的時候凛捏,會按照字母表升序排序担忧,有undefined放到最后,對于對象調(diào)用toString方法坯癣。
    一般需要自定義一個排序方式瓶盛,傳入一個比較函數(shù)作為sort方法的參數(shù),sort也會改變原數(shù)組示罗。
    // 采用默認排序法時出現(xiàn)的問題
    var arr = [7,8,9,10,11];
    arr.sort();
    console.log(arr); //[10, 11, 7, 8, 9] 并沒有按照意料中的方式排序
    // 所以需要定義一個自定義的函數(shù)惩猫,作為sort方法的參數(shù)進行排序
    var arr2 = [-4,1,18,22,3,9];
    function compare (a,b) {
        return a - b; //根據(jù)a-b的正負來排序
    }
    arr2.sort(compare);
    console.log(arr2);//[-4, 1, 3, 9, 18, 22]  寫成b-a會降序
    //針對對象的屬性的數(shù)值進行排序
    var student = [
        {
            name: 'a',
            age: 10
        },
        {
            name: 'c',
            age: 30
        },
        {
            name: 'b',
            age: 20
        },
    ];
    student.sort(function(stu1,stu2) {
        return stu1.age - stu2.age;
    })
    console.log(student); //{name: "a", age: 10} {name: "b", age: 20} {name: "c", age: 30} 按照對象的age屬性排序

ES5 數(shù)組擴展了一些功能

  • Array.isArray(obj)
    Array對象的一個靜態(tài)函數(shù),判斷一個對象是不是數(shù)組
    var a = [123];
    var b = new Date();
    console.log(Array.isArray(a)); //true
    console.log(Array.isArray(b)); //false
  • .indexOf(element)/.lastIndexOf(element)
    用于查找數(shù)組內(nèi)指定的元素的位置蚜点,沒找到返回-1轧房,找到返回下標
  • .forEach(element,index,array)
    遍歷一個數(shù)組,參數(shù)為一個回調(diào)函數(shù)绍绘,回調(diào)函數(shù)有三個參數(shù)
    1,當前元素 2奶镶,當前元素索引值 3,整個數(shù)組
    var arr = [1,2,3,4,5,6];
    arr.forEach(function (e,i,array) {
        array[i] = e + 1; //每項都加1
    });
    console.log(arr);//[2, 3, 4, 5, 6, 7]
    //forEach代替了通常用for循環(huán)遍歷數(shù)組
  • every(function (element,index,array))/some(function (element,index,array))
    every和some類似于一種邏輯判定陪拘,回調(diào)函數(shù)返回一個布爾值
    every是所有函數(shù)的每個回調(diào)函數(shù)都返回true的時候才返回true厂镇,有false的時候就終止執(zhí)行,返回false
    some是存在著有一個回調(diào)函數(shù)返回true時就終止執(zhí)行返回true藻丢,否則返回false
    對于空數(shù)組剪撬,every返回true摄乒,some返回false
    var arr = [1,2,3,-2,3];
    // 判斷數(shù)組中每一項是否都為正值
    var resultEvery = arr.every(function (value) { // 只判斷是不是整數(shù)悠反,所以參數(shù)只用到value,寫一個value就好
        return value > 0;
    });
    console.log(resultEvery);  //false
    // 判斷數(shù)組中每一項是否存在正值
    var resultSome = arr.some(function (value){
        return  value > 0;
    });
    console.log(resultSome);  //true
  • map(function(element))
    和forEach類似馍佑,遍歷數(shù)組斋否,回調(diào)函數(shù)返回值組成一個新數(shù)組返回,新數(shù)組索引和原數(shù)組一致拭荤,原數(shù)組不變茵臭。
    var arr = [1,2,3,4,5];
    var arr2 = arr.map(function (element) { //遍歷數(shù)組,返回一個新數(shù)組舅世,每項是原數(shù)組的平方
        return  Math.pow(element,2);
    })
    console.log(arr); //[1, 2, 3, 4, 5]  原數(shù)組不發(fā)生改變
    console.log(arr2); //[1, 4, 9, 16, 25]

    //上述需求也可以利用forEach實現(xiàn) 為:
    var arr3 = [];
    arr.forEach(function (e,i,array) {
        arr3.push(Math.pow(e,2)); // 利用forEach來達到同樣的效果旦委,要提前創(chuàng)建一個新數(shù)組,將得到的平方值依次push進去
    })
    console.log(arr3); // [1, 4, 9, 16, 25]
    console.log(arr); //[1, 2, 3, 4, 5]
  • filter(function(element)) 過濾
    返回數(shù)組的一個子集雏亚,回調(diào)函數(shù)用于邏輯判斷是否返回缨硝,返回true則把當前元素加到返回數(shù)組中,false則不加
    新數(shù)組只包含返回true的值罢低,索引缺失的不包括查辩,原數(shù)組保持不變
    var arr = [1,2,3,4,5];
    console.log(arr.filter(function (e) {
        return e % 2 == 0; //返回偶數(shù)
    })); //[2, 4]
    console.log(arr); // [1, 2, 3, 4, 5] 原數(shù)組不變


    //針對對象進行過濾
    var student = [
        {
            username: 'aa',
            age: 20,
        },
        {
            username: 'bb',
            age: 30,
        },
        {
            username: 'ac',
            age: 25,
        },
    ];
    //要過濾出student中username包含a字符的項
    var result = student.filter(function (e) {
       return e.username.indexOf('a') > -1; //使用indexOf可以判斷是否包含a字符
    });
    console.log(result);// {username: "aa", age: 20} {username: "ac", age: 25}
  • reduce(function(v1,v2),value)/.reduceRight(function(v1,v2),value)
    遍歷數(shù)組胖笛,調(diào)用回調(diào)函數(shù),將數(shù)組元素組合成一個值宜岛,reduce從索引最小值開始长踊,reduceRight反向,方法有2個參數(shù)萍倡, 1身弊,回調(diào)函數(shù),把兩個值合為一個列敲,返回結(jié)果 2佑刷,value,一個初始值酿炸,可選
    var arr = [1,2,3,4,5];
    var arr1 = arr.reduce(function(v1,v2) {
        console.log('本次v1為:'+v1 ,'本次v2為:' + v2);
        return  v1  + v2;
    });
    console.log(arr1); //15

Date

Date對象是JS提供的日期和時間的操作接口
Date對象有幾個靜態(tài)方法

  • Date.now()
    now方法返回當前距離 1970年1月1日00:00:00的毫秒數(shù)
    Date.now();//1502771978564
  • Date.parse()
    解析字符串瘫絮,返回距離 1970年1月1日00:00:00的毫秒數(shù),解析失敗返回NaN
    console.log(Date.parse('2017-1-1')); //1483200000000
  • Date.UTC()
    默認返回當前時區(qū)的時間填硕,接收年月日等變量作為參數(shù)麦萤,返回距離 1970年1月1日00:00:00的毫秒數(shù)
    Date.UTC(2015,0,1,2,3,4,567);//1420077784567
  • Date()
    Date函數(shù)可以直接調(diào)用,返回當前時間
  • get
    var d = new Date();
    console.log(d.getTime()); //返回距離1970年1月1日00:00:00的毫秒數(shù)
    console.log(d.getDate());//返回實例對象對應每個月的幾號(從1開始)
    console.log(d.getDay());//周幾扁眯,周日為0壮莹,周一為1
    console.log(d.getFullYear());//返回四位數(shù)的年份
    console.log(d.getMonth());//月份,0為1月
    console.log(d.getHours());//小時 0-23
    console.log(d.getMilliseconds());//毫秒 0-999
    console.log(d.getMinutes());//分鐘 0-59
    console.log(d.getSeconds());//秒 0-59
    console.log(d.getTimezoneOffset());//時區(qū)差異

另外get還有對應的set方法

  • Date對象的應用距離
    // 寫一個函數(shù)getChIntv, 獲取從當前時間到指定日期的間隔時間

    function getChIntv(dateStr) {
        var targetDate = new Date(dateStr);// 傳入目標參數(shù)姻檀,創(chuàng)建目標時間的date對象
        var currentDate = new Date();//表示現(xiàn)在時間
        var interval = targetDate - currentDate; // 可以直接相減命满,默認調(diào)用valueOf函數(shù)生成毫秒數(shù)
        if (interval > 0) {
            //生成的interval為毫秒數(shù),我們轉(zhuǎn)換為秒數(shù)并且取整
            var totalSeconds = Math.floor(interval/1000); //換算成秒數(shù)并且取整的值
            var seconds = totalSeconds%60; //得到余下來的秒數(shù)绣版,為我們最終顯示的秒數(shù)胶台,前面的可以整除的換算為分鐘小時和天

            var totalMinutes = Math.floor(totalSeconds/60); //為總共的分鐘數(shù) 這里用Math.floor取整
            var minutes = (totalMinutes%60); //同樣,可以整除的去換算為小時和天數(shù)杂抽,余下來的分鐘用于最終顯示,

            var totalHours = Math.floor(totalMinutes/60); //總共的小時數(shù) 這里用Math.floor取整
            var hours = (totalHours%24); //余下來的小時數(shù)作為最終顯示诈唬,可以整除的去換算成天數(shù)

            var totalDays = Math.floor(totalHours/24); //總共的天數(shù),不用換算成年了缩麸,所以直接換算成天數(shù)就好
            console.log('距離目標日期還有:'+ totalDays + '天' + hours + '小時' + minutes + '分鐘' + seconds + '秒');
        }
        else {
            console.log('目標日期已經(jīng)過了');
        }
    }
    getChIntv('2017-1-1');
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铸磅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杭朱,更是在濱河造成了極大的恐慌阅仔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弧械,死亡現(xiàn)場離奇詭異八酒,居然都是意外死亡,警方通過查閱死者的電腦和手機梦谜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門丘跌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袭景,“玉大人,你說我怎么就攤上這事闭树∷拾簦” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵报辱,是天一觀的道長与殃。 經(jīng)常有香客問我,道長碍现,這世上最難降的妖魔是什么幅疼? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮昼接,結(jié)果婚禮上爽篷,老公的妹妹穿的比我還像新娘。我一直安慰自己慢睡,他們只是感情好逐工,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漂辐,像睡著了一般泪喊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上髓涯,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天袒啼,我揣著相機與錄音,去河邊找鬼纬纪。 笑死蚓再,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的育八。 我是一名探鬼主播对途,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼髓棋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惶洲,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤按声,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后恬吕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體签则,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年铐料,在試婚紗的時候發(fā)現(xiàn)自己被綠了渐裂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豺旬。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柒凉,靈堂內(nèi)的尸體忽然破棺而出族阅,到底是詐尸還是另有隱情,我是刑警寧澤膝捞,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布坦刀,位于F島的核電站,受9級特大地震影響蔬咬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜林艘,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一盖奈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狐援,春花似錦卜朗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至懈涛,卻和暖如春逛万,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背批钠。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工宇植, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埋心。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓指郁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拷呆。 傳聞我的和親對象是個殘疾皇子闲坎,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,923評論 6 13
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,216評論 0 4
  • 作者:魚笑川 時間:20170511 兄弟 前夜長眠身未起 今晨須臾魂飛去 兄弟 同歲同屬同班級 無聲無息無蹤跡 ...
    魚笑川閱讀 192評論 0 3
  • 近期被各種虐童事件沖擊三觀,是你的善良所想象不到的黑暗茬斧。 1腰懂、為何會一次次出現(xiàn)類似事件?跟個別人的素質(zhì)有關(guān)项秉,更跟體...
    石榴lady閱讀 227評論 0 0