第十九彈 時間對象、引用類型

問答:

1.基礎類型有哪些?復雜類型有哪些?有什么特征?

基礎類型包括 null,undefined 數字 字符串 Boolean
復雜類型:除了基本類型外都是復雜類型;
基礎類型 在內存中是存在棧中的
復雜類型 是存儲在堆內存中的,變量只是保存對象的調用索引

Paste_Image.png

在函數參數傳遞時,對于基本類型,在函數內部修改值并不會影響外部的值,
對于對象來說,如果函數內部修改了對象的屬性值,會原對象有影響。而如果在函數內部新建了一個對象就不會對原對象有影響。

2.如下代碼的輸出? 為什么?

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);   //false 指向不是一個對象
console.log(obj1 = obj2);    //賦值:返回obj2
console.log(obj1 == obj2);   //true  指向同一對象

代碼題:

  • 寫一個函數getIntv,獲取從當前時間到指定日期的間隔時間
//寫一個函數getIntv,獲取從當前時間到指定日期的間隔時間
var str = getIntv("2016-06-19");
console.log(str);
function getIntv(endDate) {
    if (!str) return "";
    if (typeof str!=="string") return (str+"");
    var parseDate=endDate;
//解析時考慮到ES5特性 如果"-"形式有前載0就會轉化成0時區標準時間,而一般我們計算的結果都是要本地時區時間 
    if(parseDate.indexOf("-")!=-1){
      parseDate=parseDate.replace(/-/g,"/")
    }
    parseDate=new Date(parseDate);
    if(isNaN(+parseDate)) return "解析時間錯誤";
    var intv = parseDate -new Date()+24*60*60*1000-1;
    if (intv < 0) {
        return "已經過了" + endDate + "呀";
    }
    if (intv == 0) {
        return "距離" + endDate + "還有0秒";
    }
    var ret = "",
        date = "",
        hours = "",
        mins = "",
        senconds = "";
    ret += (date = parseInt(intv / (24 * 60 * 60 * 1000))) > 0 ? (intv = intv % (24 * 60 * 60 * 1000), date + "天") : "";
    ret += (hours = parseInt(intv / (60 * 60 * 1000))) > 0 ? (intv = intv % (60 * 60 * 1000), hours + "小時") : "";
    ret += (mins = parseInt(intv / (60 * 1000))) > 0 ? (intv = intv % (60 * 1000), mins + "分鐘") : "";
    ret += (seconds = parseInt(intv / 1000)) > 0 ? seconds + "秒" : "";
    return "距離" + endDate + "還有" + ret;
}
  • 把數字日期改成中文日期
//把數字日期改成中文日期
var str = getChsDate('1989-10-10');
console.log(str);
function getChsDate(str) {
    if (!str) return "";
    if (typeof str!=="string") return (str+"");
    var parseDate=str;
    //解析時考慮到ES5特性 如果"-"形式有前載0就會轉化成0時區標準時間,而一般我們計算的結果都是要本地時區時間 
    if(parseDate.indexOf("-")!=-1){
      parseDate=parseDate.replace(/-/g,"/")
    }
    parseDate = new Date(parseDate);
    if (isNaN(+parseDate)) { //先嘗試轉換,如果不行返回 "輸入日期錯誤"
        return "輸入日期錯誤";
    }
    var year = (function() {
        var tempArr = parseDate.getFullYear().toString().split("");
        var ret = "";
        for (var i in tempArr) {
            ret += trans(tempArr[i]);
        }
        return ret;
    })();
    var month = trans(parseDate.getMonth() + 1);
    var date = trans(parseDate.getDate());
    return year + "年" + month + "月" + date + "日"
}
function trans(num) {
    var arr = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十',
        '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十', '二十一', '二十二', '二十三', '二十四', '二十五', '二十六', '二十七', '二十八', '二十九', '三十', '三十一'
    ]
    if (!num || isNaN(+num)) return "";
    num = parseInt(num);
    if (num < 0 || num > arr.length - 1) return "";
    return arr[num];
}
  • 完善如下代碼,用于獲取執行時間如:
//完善如下代碼,用于獲取執行時間如:
var Runtime = (function(){
    var start=0,end=0;
    return {
        start: function(){
              start= new Date();
        },
        end: function(){
             end= new Date();
        },
        get: function(){
             return end-start;
        }
    };
}());
Runtime.start();
for(var i=0;i<10000;i++){
  console.log(i);
}
Runtime.end();
console.log(Runtime.get() );
  • 樓梯有200級,每次走1級或是2級,從底走到頂一共有多少種走法?用代碼(遞歸)實現
//樓梯有200級,每次走1級或是2級,從底走到頂一共有多少種走法?用代碼(遞歸)實現
function getFoolorMethod(n){
  if(n==1) return 1;
  if(n==2) return 2;
  return getMethod(n-1)+getMethod(n-2);
}

寫一個深拷貝的方法,拷貝對象以及內部嵌套的值可以是字符串、數字、布爾、數組、json對象中的任意項

//寫一個深拷貝的方法,拷貝對象以及內部嵌套的值可以是字符串、數字、布爾、數組、json對象中的任意項
function deepCopy(oldObj){
  var newObj=oldObj;
  if(oldObj&&typeof oldObj==="object"){
    newObj=Object.prototype.toString.call(oldObj)==="[object Array]"?[]:{};
    for(var i in oldObj){
      newObj[i]=deepCopy(oldObj[i]);
    }
  }
  return newObj;
}

參考文檔:
阮一峰博客
饑人谷課件


本教程版權歸小韓同學和饑人谷所有,轉載須說明來源

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容