美文网首页
时间对象、引用类型

时间对象、引用类型

作者: 车万里 | 来源:发表于2016-11-20 22:43 被阅读0次

    问答

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

    • 基础类型:数字、字符串、布尔、undefined、null。
    • 复杂类型:数组、对象、函数、正则。
      特征:基础类型是简单的数据保存,保存在栈内存中。复杂类型保存在堆内存,而指向这个复杂类型数据的指针则保存在栈内存中,相对基础类型来说它的数据更大多更大,如果完全保存在栈内存中容易出现性能问题,复杂类型的赋值所指向的都是同一个数据堆。

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

    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2);//false,因为obj1和obj2是指向不同地址的2个变量,并不相等。
    console.log(obj1 = obj2);//{a:1, b:2},将obj2赋值给obj1,实际上也就是将obj2的地址赋值给obj1。
    console.log(obj1 == obj2);//true,因为上一步已经将obj1赋值给obj2,他们指向同一地址,所以输出true。
    

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

    function getIntv(times){
      var str1 = Date.parse(times);
      var str2=Date.now();
      var str3 =Math.abs(str2-str1);
      var day=Math.floor(str3/86400000);
      str3 =str3%86400000;
      var hours =Math.floor(str3/3600000);
      str3 =str3%3600000;
      var minutes =Math.floor(str3/60000);
      str3=str3%60000;
      var seconds =Math.floor(str3/1000);
      var str='距'+times+'还有'+day +'天' +hours+ '小时'+ minutes+'分' +seconds+ '秒';
      console.log(str);
    };
    getIntv("2016-11-21");
    

    2.把数字日期改成中文日期

    function getChsDate(times){
      var str1 =new Date(times);
      var arr=["零","一","二","三","四","五","六","七","八","九",
      "十","十一","十二","十三","十四","十五","十六","十七","十八",
      "十九","二十","二十一","二十二","二十三","二十四","二十五",
      "二十六","二十七","二十八","二十九","三十","三十一"];
        years=new String(str1.getFullYear());
        console.log(years);
        month=new String(str1.getMonth()+1);
        days=new String(str1.getDate()());
        console.log(days);
      var chdate='';
    for(var i=0;i<years.length;i++){
        chdate+=arr[years[i]];
      }
      chdate+='年'+arr[month]+'月'+arr[days]+'日';
      console.log(chdate);
    }
     getChsDate('2015-01-08');
    

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

    function getLastNDays(days){
      var nowTime =Date.now();
      var b=days*86400000;
      var c =new Date(nowTime-b);
      console.log(c.getFullYear()+'-'+(c.getMonth()+1)+'-'+c.getDate());
    }
    getLastNDays(7);
    

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

    var Runtime = (function(){
        var a;
        var b;
        var obj = {
            start: function(){
                  a =Date.now();
                  console.log(a);
                  return(a);//code here ..., 当前时间
            },
            end: function(){
                  b =Date.now();
                  console.log(b);
              return(b);//code here ...  结束时间
            },
            get: function(){
              return(b-a);
                 //code here ...  获取执行时间
            }
        };
    return obj;
    }());
    Runtime.start();
    for(var i=0; i<1000; i++){
        console.log(1);
    }//todo somethint
    Runtime.end();
    console.log(  Runtime.get() );
    

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

    function walk(n){
      if(n===1){
        return 1;
    }else if(n===2){
      return 2 ;
    }else{
      return (walk(n-1)+walk(n-2));
    }
    }//10946
    

    楼梯有20级,假设每次走1级或者2级,总走法=19级每次走一级或者两级的走法+18级每次走一级或者两级的走法,以此类推,当剩下1级时,只有一种走法,剩两级时,可以走一级或者两级,两种走法。

    6.写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项(PS:尝试另外一种方法 var obj2 = JSON.parse( JSON.stringify(obj1) )

    function objCopy(obj){
        var newObj = {};
        for(var key in obj){
            if(typeof obj[key] === 'object'){
                newObj[key] = objCopy(obj[key]);
            }
            else newObj[key] = obj[key];
        }
        return newObj;
    }
    

    另一种方法

    function objCopy(obj){
        var newObj=JSON.parse(JSON.stringify(obj));
        return newObj;
    }
    

    相关文章

      网友评论

          本文标题:时间对象、引用类型

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