美文网首页饥人谷技术博客
任务19-时间对象、引用类型

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

作者: 饥人谷_桶饭 | 来源:发表于2017-01-02 23:16 被阅读0次

    问答

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

      答:

      • 基础类型:
        1. 数字number
        2. 字符串string
        3. 布尔值boolean
        4. null
        5. undefined
      • 复杂类型:
        1. 对象object
      • 特征:
        • 基础类型:变量储存的是值。
        • 复杂类型:变量储存的是内存地址。
        • 基础类型再赋值的时候拷贝的是值,复杂函数则是地址。


          Paste_Image.png
          Paste_Image.png
    • 如下代码的输出? 为什么?

      var obj1 = {a:1, b:2};
      var obj2 = {a:1, b:2};
      console.log(obj1 == obj2);//输出false,因为obj1和obj2的地址不同。
      console.log(obj1 = obj2);//输出obj2{a:1, b:2},将obj2地址给了obj1。
      console.log(obj1 == obj2);//输出true,因为现在obj1和obj2指向的地址相同。
      
      Paste_Image.png

    代码题

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

      
      function getIntv (str) {
        var nowtime = Date.now();
        var fut = Date.parse(str);
        var dtime = Math.abs(fut-nowtime);
        var day = Math.floor(dtime/(24*3600000));
        var hour = Math.floor((dtime-day*24*3600000)/3600000);
        var min = Math.floor((dtime-(day*24+hour)*3600000)/60000);
        var sec = Math.floor((dtime-(day*24+hour)*3600000-min*60000)/1000);
        var result;
        if(fut>nowtime){
            result = "距离"+ str +  "还有:"+ day+"天"+ hour+"时"+ min +"分"+ sec +"秒";
         } else {
            result = "距离"+ str +  "已过去了:"+ day+"天"+ hour+"时"+ min +"分"+ sec +"秒";
           }
          return result;
      }
      
      var str = getIntv("2017-01-08");
      
      console.log(str); 
      
      var str = getIntv("2016-01-08");
      
      console.log(str); 
      
      Paste_Image.png
    2. 把数字日期改成中文日期

      var str = getChsDate('2015-01-08');
      console.log(str);  // 二零一五年一月八日
      
      function getChsDate(vl){
          var a =['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一'];
          var t = new Date(vl);
          var year = t.getFullYear()+'';
          var month = t.getMonth()+1+'';
          var date = t.getDate()+'';
          var n = '';
          for(var i =0;i<year.length;i++){
              n = n+a[year[i]];
          }
      
          return  n+'年'+a[month]+'月'+a[date]+'日';
      }
      
      var str = getChsDate('2015-01-08');
      console.log(str);  // 二零一五年一月八日
      
      Paste_Image.png
    3. 写一个函数获取n天前的日期

       var lastWeek =  getLastNDays(7); // ‘2016-01-08’
       var lastMonth = getLastNDays(30); //'2015-12-15'
       ```
       ```
           var lastWeek =  getLastNDays(7); // ‘2016-01-08’
           var lastMonth = getLastNDays(30); //'2015-12-15'
       
       function getLastNDays(num){
       
           var t = new Date();
           var t2 = new Date(t.getTime()-num*24*3600*1000);
           return t2.getFullYear()+'-'+(t2.getMonth()+1)+'-'+t2.getDate();
       }
       ```
       ![Paste_Image.png](https://img.haomeiwen.com/i2858982/d116d3a4b0c54be4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    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 somethint
       Runtime.end();
       console.log(  Runtime.get() );
       ```
       
       ```
           var Runtime = (function() {
               //code here ...
               var t1, t2, t3;
               var obj = {
                   start: function() {
                       //code here ..., 当前时间
                       t1 = Date.now();
                   },
                   end: function() {
                       //code here ...  结束时间
                       t2 = Date.now();
                   },
                   get: function() {
                       //code here ...  获取执行时间
                       t3 = t2 - t1;
                       return t3;
                   }
               };
               return obj;
           }());
           Runtime.start();
           //todo somethint
           for(var i = 0;i<10000;i++){
               console.log(1);
           }
           Runtime.end();
           console.log(Runtime.get());
       ```
       ![Paste_Image.png](https://img.haomeiwen.com/i2858982/ebe35f8d9372c3e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    5. 楼梯有20级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现
    
       ```
       function f(num){
               if(num === 1){
                   return 1;
               }else if(num === 2){
                   return 2
               }else{
                   return f(num-2)+f(num-1);
               }
             }
       ```
       ![Paste_Image.png](https://img.haomeiwen.com/i2858982/2adf41f5d495961d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    6. 写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项(PS:尝试另外一种方法 var obj2 = JSON.parse( JSON.stringify(obj1) )
    
       ```
       var me = {
           "name": "oxc",
           "age": 23,
           "hobby": {
                   "food": "meat",
               "sport": "bicycle",
               "number": 24
           }
       };
       function dc(obj1){
               var obj2 = JSON.parse(JSON.stringify(obj1));
                 /* 先把obj1指向的对象转化为字符串,此时obj1指向的对象不变,在把obj1字符串转化为一个对象,这个对象和obj1指向的对象不是同一个 */
               return obj2;
       }
       ```
       
       ```
       var me = {
           "name": "oxc",
           "age": 23,
           "hobby": {
               "food": "meat",
               "sport": "bicycle",
               "number": 24
           }
       }
       
       function dc(obj1){
           var obj2 = {};
           for(var key in obj1){
               if(typeof obj1[key] == 'object'){
                   obj2[key] = dc(obj1[key])
               }else{
                   obj2[key] = obj1[key]
               }   
           };
           return obj2;
       }
       ```
    
    

    相关文章

      网友评论

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

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