时间对象、引用类型

2016-11-20  本文已影响0人  车万里

问答

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

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;
}
上一篇下一篇

猜你喜欢

热点阅读