時(shí)間對(duì)象、引用類型

1欺缘、基礎(chǔ)類型有哪些栋豫?復(fù)雜類型有哪些?有什么特征谚殊?

  • 基礎(chǔ)類型:number,string,boolean,null,undefined;
  • 復(fù)雜類型:對(duì)象丧鸯,數(shù)組(數(shù)組其實(shí)也是對(duì)象)等。

兩者最大的區(qū)別在于存儲(chǔ)方式的不同

  • 基礎(chǔ)類型將內(nèi)容直接存儲(chǔ)在棧中嫩絮,記錄的是該數(shù)據(jù)類型的值丛肢,即直接訪問围肥;
  • 復(fù)雜類型將內(nèi)容存儲(chǔ)在堆中,棧中記錄的是指針(堆的地址)摔踱,外部訪問時(shí)先引出地址虐先,再通過地址去找到值所存放的位置。

如圖所示派敷,可以理解為A,B,C,D這些變量名代表了一個(gè)盒子:

  • 基礎(chǔ)類型盒子里裝的是真實(shí)的值蛹批,以A,B為例:
  • 復(fù)雜類型盒子里裝的是地址(當(dāng)然地址具體的值我們是不知道的圖中地址的值只是假設(shè))

2篮愉、如下代碼的輸出? 為什么?

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);   
console.log(obj1 = obj2);
console.log(obj1 == obj2);
  • 第一個(gè)是false腐芍;問題一已經(jīng)解釋了對(duì)象的存儲(chǔ)方式,obj1與obj2代表了兩個(gè)不同的對(duì)象试躏,盡管它們的內(nèi)容相同猪勇,但其內(nèi)部的地址,以及地址所指引的空間都不相同颠蕴,所以它們是兩個(gè)對(duì)象泣刹。
  • 第二個(gè)輸出的是obj2的內(nèi)容,把obj1中的地址數(shù)據(jù)賦值為obj2中的地址犀被,從而讓obj1指向obj2的對(duì)象椅您。
  • 第三為true;既然兩個(gè)對(duì)象一致了寡键,輸出結(jié)果自然為true掀泳。

3、寫一個(gè)函數(shù)getIntv西轩,獲取從當(dāng)前時(shí)間到指定日期的間隔時(shí)間

function getIntv(time){
    var definit = new Date(time).getTime();
    var now = new Date().getTime(); 
    var x = definit - now;
    var day = Math.floor(x/1000/3600/24);
    var hour = Math.floor(x%(1000*3600*24)/3600/1000);
    var min = Math.floor(x%(1000*3600*24)%(3600*1000)/(60*1000));
    var sec = Math.floor(x%(1000*3600*24)%(3600*1000)%(60*1000)/1000);
    return "距離" + time + "還有" + day + "天" + hour + "小時(shí)" + min +"分" + sec +"秒";
}

4员舵、把數(shù)字日期改成中文日期

function getChsDate(time){
    var CN=["零","一","二","三","四","五","六","七","八","九"];
    var d = new Date(time),
        year = d.getFullYear(),
        month = d.getMonth(),
        day = d.getDate();
    var str="";

    function printYear(year){
        var yearArr = year.toString().split("");
        for(var i = 0; i < 4; i++){
            str += CN[yearArr[i]];
        }
        str += "年";
    }

    function printMonth(month) {
        if (month > 9){
            str += "十";
            str += CN[month-9];
        }
        else {
            str += CN[month+1];
        }
        str += "月";
    }
    function printDay(day) {
        if (day < 11) {
            str += CN[day];
        }
        else if(day < 20){
            str += "十";
            str += CN[day-10]
        }
        else if(day < 30){
            str += "二十";
            str += CN[day-20]
        }
        else {
            str += "三十";
            str += CN[day-30]
        }
        str += "日"
    }
    printYear(year);
    printMonth(month);
    printDay(day);
    return str;
}
console.log(getChsDate('2015-01-08'));
console.log(getChsDate('2015-11-28'));

4、寫一個(gè)函數(shù)獲取n天前的日期

function getLastNDays(n) {
    var now = new Date().getTime();
    var destination = new Date(now - n * 3600 * 1000 * 24);
    var month = destination.getMonth()+1;
    return destination.getFullYear() + "-" + month + "-" + destination.getDate();
}
console.log(lastWeek = getLastNDays(7)); 
console.log(lastMonth = getLastNDays(31)); 

5藕畔、獲取執(zhí)行時(shí)間

var Runtime = (function(){
    var startTime,endTime;
    var obj = {
        start: function(){
             startTime = new Date().getTime();
        },
        end: function(){
            endTime = new Date().getTime();
        },
        get: function(){
            var time = endTime - startTime;
            return time + "ms"
        }
    };
    return obj;
}());
Runtime.start();
for(var i=0;i<10000;i++){
    console.log(1)
}
Runtime.end();
console.log(  Runtime.get() );

6马僻、樓梯有200級(jí),每次走1級(jí)或是2級(jí)注服,從底走到頂一共有多少種走法韭邓?用代碼(遞歸)實(shí)現(xiàn)

依照題意代碼應(yīng)該是這樣的:

function method(num){
    var s = 0;
    if(num == 1){
        return 1; 
    }
    else if(num == 2){
        return 2;
    }
    else {
        s= method(num-2) + method(num-1);
    }
    return s;
method(200);

在控制臺(tái)運(yùn)行時(shí),會(huì)發(fā)現(xiàn)一個(gè)問題——無法得出結(jié)果祠汇,并且網(wǎng)頁卡死了仍秤。那是不是這個(gè)算法有問題呢?其實(shí)不是可很,如果運(yùn)行method(10)能得到結(jié)果(89)诗力。既然代碼沒問題,那又為什么會(huì)出現(xiàn)這樣的情況呢?

這時(shí)就需要知道一個(gè)概念:函數(shù)的堆棧溢出苇本,它出現(xiàn)的場(chǎng)合不少袜茧,但最常見的,沒錯(cuò)瓣窄,就是函數(shù)的大量遞歸笛厦。

簡單的說就是,堆和棧(主要是棧)是存在處理上限的俺夕,一旦需要待處理的函數(shù)中的(局部變量裳凸,傳遞參數(shù),返回值等等)超過其上限后劝贸,計(jì)算機(jī)就罷工了姨谷。而函數(shù)的遞歸的思路正好是:哥們:“這個(gè)問題我不會(huì),你幫我解決”映九,然后這個(gè)哥們?cè)絹碓蕉嗝蜗妫竭_(dá)一定閥值之后,程序就GG了件甥。所以解決這類由于遞歸出現(xiàn)的堆棧溢出的最好辦法就是即使釋放捌议,即使用閉包法:

function method(num){
    var s = 0;
    if(num == 1){
        return 1; 
    }
    else if(num == 2){
        return 2;
    }
    else {
        (function sum(){
                return method(n-1) + method(n-2);
        }())
        return sum;
    }
method(200);

當(dāng)然針對(duì)本題有一個(gè)更好的思路,很明顯就能發(fā)現(xiàn)這個(gè)題的一個(gè)特征:f(n) = f(n-1) + f(n-2);沒錯(cuò)引有,就是斐波拉契數(shù)列瓣颅。所以可以這樣

function method(num){
    var s1=1,s2=2,temp;
    if(num == 1){
        return s1;
    }
    if(num == 2){
        return s2;
    }
    for(var i = 0; i < num - 2; i++){
        temp = s2;
        s2 = s1 +s2;
        s1 = temp;
    }
    return s2;
}
method(200);  // 4.53973694165308e+41

7、寫一個(gè)json對(duì)象深拷貝的方法轿曙,json對(duì)象可以多層嵌套弄捕,值可以是字符串僻孝、數(shù)字导帝、布爾、json對(duì)象中的任意項(xiàng)

深淺拷貝的區(qū)別在于:
對(duì)象里的引用類型保存的指針是新的(深拷貝)穿铆,還是舊的(淺拷貝)您单。
jquery中的Object.extend()方法和ES6的Object.assign()方法就是淺拷貝;

function jsonCopy(obj){
    var newJSON = {};
    for(var key in obj){
        if(typeof(obj[key]) == "object"){
            newJSON[key] = jsonCopy(obj[key]);
        }
        else newJSON[key] = obj[key];
    }
    return newJSON;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荞雏,一起剝皮案震驚了整個(gè)濱河市虐秦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凤优,老刑警劉巖悦陋,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異筑辨,居然都是意外死亡俺驶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門棍辕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暮现,“玉大人还绘,你說我怎么就攤上這事∑艽” “怎么了拍顷?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長塘幅。 經(jīng)常有香客問我昔案,道長,這世上最難降的妖魔是什么电媳? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任爱沟,我火速辦了婚禮,結(jié)果婚禮上匆背,老公的妹妹穿的比我還像新娘呼伸。我一直安慰自己,他們只是感情好钝尸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布括享。 她就那樣靜靜地躺著,像睡著了一般珍促。 火紅的嫁衣襯著肌膚如雪铃辖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天猪叙,我揣著相機(jī)與錄音娇斩,去河邊找鬼。 笑死穴翩,一個(gè)胖子當(dāng)著我的面吹牛犬第,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芒帕,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歉嗓,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了背蟆?” 一聲冷哼從身側(cè)響起鉴分,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎带膀,沒想到半個(gè)月后志珍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垛叨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年伦糯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舔株,死狀恐怖莺琳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情载慈,我是刑警寧澤惭等,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站办铡,受9級(jí)特大地震影響辞做,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寡具,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一秤茅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧童叠,春花似錦框喳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杜秸,卻和暖如春放仗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撬碟。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工诞挨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呢蛤。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓惶傻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親顾稀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子达罗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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