日夜談——時(shí)間對(duì)象、引用類(lèi)型

NUM 19

<h4>1.基礎(chǔ)類(lèi)型有哪些?復(fù)雜類(lèi)型有哪些?有什么特征?</h4>

基礎(chǔ)類(lèi)型:

<li>數(shù)字(Number)
<li>字符串(String)
<li>布爾值(bollean)
<li>null
<li>undefined
</br>

復(fù)雜類(lèi)型:

<li>數(shù)組(Array)
<li>對(duì)象(object)
<li>函數(shù)(function)
<li>正則
</br>

特征:

<li>基礎(chǔ)類(lèi)型變量時(shí)存的是值,而復(fù)雜類(lèi)型變量時(shí)存的是內(nèi)存地址。
<li>因此基礎(chǔ)類(lèi)型在賦值的時(shí)候是拷貝值,而復(fù)雜類(lèi)型在賦值時(shí)是拷貝內(nèi)存地址。

圖片解釋?zhuān)?/h5>
簡(jiǎn)單類(lèi)型.jpg
復(fù)雜類(lèi)型.jpg

<h4>2.如下代碼的輸出? 為什么?</h4>

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); //flase;
console.log(obj1 = obj2);  //Object{a:1,b:2};
console.log(obj1 == obj2); //ture

解釋?zhuān)?br> 首先,obj1和obj2是復(fù)雜類(lèi)型,在賦值時(shí),分別賦予不同內(nèi)存的地址,所以,console.log(obj1 == obj2)即是比較兩個(gè)內(nèi)存地址是否相等,因此輸出flase,而console.log(obj1 = obj2)是將obj2的內(nèi)存地址賦值在obj1上,而obj2的內(nèi)存地址保存著{a:1,b:2},因此輸出Object{a:1,b:2},而最后一個(gè)console.log(obj1 == obj2),因此前obj1已經(jīng)賦值了obj2的內(nèi)存地址,因此返回ture。
</br>
<h3>2.代碼</h3>

1.寫(xiě)一個(gè)函數(shù)getIntv,獲取從當(dāng)前時(shí)間到指定日期的間隔時(shí)間

var str = getIntv("2016-01-08");
console.log(str); // 距除夕還有 20 天 15 小時(shí) 20 分 10 秒
function getIntv(time){
    var t1 = Date.parse(time)-Date.now();
    var t2 = t1/(24*60*60*1000);
    var d = Math.floor(t2);
    var h = Math.floor((t2-d)*24);
    var m = Math.floor(((t2-d)*24)-h)*60;
    var s = Math.floor(((t2-d)*24)*60-m)*60;
    return time = "距離" + time + "還有" + d + "天" + h+"小時(shí)" + m+ "分鐘" + s +"秒"; 
}
    var str = getIntv("2017/11/30");
    str;




![代碼一.png](http://upload-images.jianshu.io/upload_images/2887484-552340b12a0da100.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

</br>
#####2.把數(shù)字日期改成中文日期


        var str = getChsDate('2015-01-08');
        console.log(str);  // 二零一五年一月八日

代碼:

        function getChsDate(time){
            var date = ['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一'];
            var a = new Date(time);
            var b = a.getFullYear()+'';
            var year = ''  ;
            for(var i=0 ; i<b.length;i++){
                year = year + date[b[i]]; 
            };
            var month = date[a.getMonth()+1 ];
            var day = date[a.getDate()];
            return  year + '年' + month + '月' + day + '日';
        }
執(zhí)行結(jié)果:

![代碼2.png](http://upload-images.jianshu.io/upload_images/2887484-f3a9b6b2fb6ce0bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


#####5.寫(xiě)一個(gè)函數(shù)獲取n天前的日期
    var lastWeek =  getLastNDays(7); // ‘2016-01-08’
    var lastMonth = getLastNDays(30); //'2015-12-15'

代碼:

    function getLastDays(time){
        var a = Date.now();
        var b = time*(24*60*60*1000)
        var d = a - b ;
        var ld = new Date(d);
        return  ld.getFullYear()+'-'+(ld.getMonth()+1)+'-'+ld.getDate()
    }

執(zhí)行結(jié)果:

![code3.png](http://upload-images.jianshu.io/upload_images/2887484-f880c58638c9183f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#####6.完善如下代碼,用于獲取執(zhí)行時(shí)間如:

![argument4.png](http://upload-images.jianshu.io/upload_images/2887484-8f92355dc93937e4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


    var Runtime = (function(){
        var st; var ed; var rt;
        var obj = {
            start : function(){
                st = Date.now();
            },
            end : function(){
                ed =Date.now();
            },
            get : function(){
                return rt = ed - st;
            }
        };
    return obj;
    }());
    Runtime.start();
    for(var i=0;i<1000;i++){
        console.log(1);
    };
    Runtime.end();
    console.log( Runtime.get() );

執(zhí)行結(jié)果:

![code5.png](http://upload-images.jianshu.io/upload_images/2887484-be6dfd544e3940cd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#####7.樓梯有20級(jí),每次走1級(jí)或是2級(jí),從底走到頂一共有多少種走法?用代碼(遞歸)實(shí)現(xiàn)
    function getWay(n){
        if(n === 1){
            return 1;
        }else if(n === 2){
            return 2;
        }
        else{
            return getWay ( n - 1 ) + getWay ( n - 2);
        }
    }
    //測(cè)試
    var num5 = getWay(5);
    var num20 = getWay(20);
    console.log(num5);
    console.log(num20);

#####8.寫(xiě)一個(gè)json對(duì)象深拷貝的方法,json對(duì)象可以多層嵌套,值可以是字符串、數(shù)字、布爾、json對(duì)象中的任意項(xiàng)(PS:嘗試另外一種方法 `var obj2 = JSON.parse( JSON.stringify(obj1)`)

JSON深拷貝一:

    var west = {
        name :'Westbook',
        age : 26,
        sex : 'man',
        other:{
            name: 'Durant',
            agr : 27,
            sex : 'man'
        }
    };
    function copyObject(obj){
        var obj2 =  {};
        for(key in obj){
            if(typeof obj[key] == 'object'){
                obj2[key] = copyObject(obj[key]);
            }else{
                obj2[key] = obj[key];
            }
        };
        return obj2;
    };

JSON深拷貝二:

    var west = {
        name :'Westbook',
        age : 26,
        sex : 'man',
        other:{
            name: 'Durant',
            agr : 27,
            sex : 'man'
        }
    };
    function copyObj(obj){
        var str = JSON.stringify(obj);
        return JSON.parse(str);
    };


參考資料:
<a >javascript遞歸函數(shù)理解和說(shuō)明</a>
<a >javascript中的淺拷貝和深拷貝</a>
<a >阮一峰JS教程</a>

**版權(quán)歸饑人谷peter和饑人谷所有,若有轉(zhuǎn)載,請(qǐng)注明來(lái)源**

感謝瓜子板凳觀眾:
![gaki19](http://upload-images.jianshu.io/upload_images/2887484-47186e199a088779?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容