美文网首页
任务19-时间对象、引用类型

任务19-时间对象、引用类型

作者: 咸吧 | 来源:发表于2016-07-30 16:04 被阅读0次

    问答题

    基础类型有哪些?复杂类型有哪些?有什么特征?

    基础类型:数值、字符串、布尔值。是指保存在栈内存中的数据。
    特殊类型:未定义(undefined)、空值(null)。
    复杂类型:数组、函数、正则、对象。是指保存在堆内存中的数据,保存变量的其实是一个指针。

    如下代码的输出? 为什么?

    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2);//false obj1和obj2的数据存放在不同的堆内存中,obj1、obj2存放的是数据指针,并不相等。
    console.log(obj1 = obj2);// 把obj2的存放地址赋值给obj1,现在两者相等了
    console.log(obj1 == obj2);//true
    

    代码题

    1、写一个函数getIntv,获取从当前时间到指定日期的间隔时间。

    var str = getIntv("2016-01-08");
    console.log(str); // 距除夕还有 20 天 15 小时 20 分 10 秒
    

    函数getIntv

    function getIntv(str){
      var during = new Date(Math.abs(Date.parse(str)-Date.now())),
      year = during.getFullYear(during)-1970,
      month = during.getMonth(during)+1,
      date = during.getDate(during),
      hours = during.getHours(during),
      minutes = during.getMinutes(during),
      seconds = during.getSeconds(during),
      result =  '距除夕还有'+year+'年'+month+'月'+date+'日'+hours+'时'+minutes+'分'+seconds+'秒';
      return(result);
       }
    getIntv('2017-1-28');
    

    2、把数字日期改成中文日期。

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

    函数 getChsDate

    function getChsDate( dateStr ){
        var dict = [ "零","一","二","三", "四","五","六","七","八", "九", "十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","二十一","二十二","二十三","二十四","二十五","二十六","二十七","二十八","二十九","三十","三十一"];
        var date = dateStr.split('-'),
            yy = date[0],
            mm = date[1],
            dd = date[2];
    
        var yearStr = dict[yy[0]] + dict[yy[1]] + dict[yy[2]] + dict[yy[3]];
        var monthStr,dayStr;
            monthStr = dict[Math.abs(mm)];
            dayStr = dict[Math.abs(dd)];
      return yearStr + '年' + monthStr + '月' +dayStr + '日';
    }
    var str1 = getChsDate('2015-01-08');
    console.log(str1);  
    var str2 = getChsDate('2015-11-08');
    console.log(str2);  
    var str3 = getChsDate('2015-11-28');
    console.log(str3);  
    

    3、写一个函数获取n天前的日期

    var lastWeek = getLastNDays(7); // ‘2016-01-08’
    var lastMonth = getLastNDays(30); //'2015-12-15'
    

    函数getLastNDays

    function getLastNDays(days){
      var during = Date.now()-days*24*3600*1000;
      var newTime = new Date(during);
      var yearStr = newTime.getFullYear(newTime),
          monthStr = newTime.getMonth(newTime)+1,
          dateStr = newTime.getDate(newTime);
      return yearStr+'-'+monthStr+'-'+dateStr;
    }
    console.log(getLastNDays(7)); 
    console.log(getLastNDays(30)); 
    

    4、完善如下代码,用于获取执行时间如:

    var Runtime = (function(){ 
       //code here ... 
       var obj = { 
                start: function(){ 
                  //code here ..., 当前时间 
                }, 
                end: function(){ 
                   //code here ... 结束时间 
                }, 
                get: function(){ 
                   //code here ... 获取执行时间
                 } 
           };
    return obj;
    }());
    Runtime.start();
    //todo somethintRuntime.end();
     console.log( Runtime.get() );
    

    函数Runtime

    var Runtime = (function(){ 
       var startTime,endTime,during;
       var obj = { 
                start: function(){ 
                 startTime = Date.now();
                  return startTime;
                }, 
                end: function(){ 
                  endTime = Date.now();
                  return endTime;
                }, 
                get: function(){ 
                   during = endTime - startTime;
                  return during+'ms';
                 } 
           };
    return obj;
    }());
    Runtime.start();
    // noprotect
    for(var i = 0;i<1000;i++){
      console.log(i);
    }
    Runtime.end();
     console.log(Runtime.get());
    

    5、楼梯有200级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现。

    function fn(n){
      if(n === 1){return 1;}
      else if(n === 2){return 2;}
            else{return fn(n-1)+fn(n-2);} 
    }
    console.log(fn(3));  //3
    console.log(fn(20));  //10946
    

    6、写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项。

    var obj={
        a:{
            son1:'aa',  
            son2:'bb'
        },
        b:20,
        c:[1,2,3],
        d:true
    };
    function deepcopy(obj){
      if(typeof obj!='object') 
            {
                return obj;
            }
    
            var newobj={};
      
            for(var attr in obj)
            {
                newobj[attr]=deepcopy(obj[attr]); 
            }
            return newobj;
    }
    
    deepCopy

    相关文章

      网友评论

          本文标题:任务19-时间对象、引用类型

          本文链接:https://www.haomeiwen.com/subject/pcqtsttx.html