JS时间对象和递归

  • 基础类型有哪些?复杂类型有哪些?有什么特征?
    一般来说JS的基础类型主要分为5种,指的是保存在栈内存中的简单数据段;
  1. 数字:number
  2. 布尔值:true、false
  3. 字符串:string
  4. null: 控制针
  5. underfined:有指针却未赋值
  • 复杂类型只有object:包括 数组、对象、函数、正则,指的是保存在堆内存中的对象,变量中保存的实际上只是一个指针(坐标),这个指针执行的是内存中的另一个位置,由该位置保存对象。

  • 如下代码的输出? 为什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);    //判断obj1是否等于obj2
console.log(obj1 = obj2);      //将obj2赋值给obj1
console.log(obj1 == obj2);    //再次判断obj1是否等于obj2

因为复杂类型的特性,两个对象分别是不同的位置,所以结果为:

false
Object {a: 1, b: 2}
true

代码

  • 写一个函数getIntv,获取从当前时间到指定日期的间隔时间
function getIntv(haha){
  a= Date.now();
  b= Date.parse(haha);
  c= b-a;
  d= Math.floor(c/(1000*60*60*24));
  e= Math.floor((c-d*1000*60*60*24)/(1000*60*60));
  f= Math.floor((c-d*1000*60*60*24-e*1000*60*60)/(1000*60));
  g= Math.floor((c-d*1000*60*60*24-e*1000*60*60-f*1000*60)/1000);
  return ("距除夕还有"+d+"天"+e+"小时"+f+"分钟"+g+"秒")
}
var str = getIntv("2017-01-27");
console.log(str);


  • 把数字日期改成中文日期
function getChsDate(lala){
  num=['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三',
'十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五',
'二十六','二十七','二十八','二十九','三十','三十一']
  var damo = lala.split('-')     
  var b = damo[0].split('')    
 for( var e =0 ;e< damo.length; e++) { 
  for(var i = 0 ;i< b.length ; i++) {  
    for(var f = 0 ;f< num.length ;f++) {   
      if( damo[e] == f.toString() ) {
        damo[e] = num[f]
      }
      if( b[i] == f.toString() ) {
        b[i] = num[f]
      }
    }
  }
 }  
  return ( b.join("")+"年"+damo[1]+"月"+damo[2]+"日" )
}

var str = getChsDate("2015-11-31")
console.log(str)

  • 写一个函数获取n天前的日期
function getLastNDays(lala) {
  var damo = new Date().getTime()-(lala*1000*60*60*24);
  var d2 = new Date(damo)
  var ad =(d2.getMonth()+1)
  console.log(d2.getFullYear()+'-'+ad+'-'+d2.getDate())   
}

 getLastNDays(40);

  • 完善如下代码,用于获取执行时间如:
var Runtime = (function(){
    var a,b,c;
    return {
        start: function(){
             a = Date.now();   //获取现在的时间
             console.log(a);
        },
        end: function(){
             b = Date.now();    //获取执行后的时间
             console.log(b);
        },
        get: function(){ 
             c = b - a;              //两者相减得出执行代码的时间。            
             return (c+"毫秒");        //单位为毫秒
        }
    };
}());
Runtime.start();             

for(var i = 0; i<60000 ;i++ ){         
                                   //这里计算i循环60000次所需要的时间
}
Runtime.end();
console.log(Runtime.get());     

  • 楼梯有200级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现
function fn(sum){
  if(sum===1){
    return 1;
  }
  if(sum===2){
    return 2;
  }
  return fn(sum-1)+fn(sum-2)
}
//楼梯的走法相当于(走一步之后+后面的走法)+(走两步之后+后面的走法)
//走一步或者走两步是条件
console.log(fn(200));                 //数值太大,会卡死

  • 写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项
var obj={
  sex:18,
  vala:"hello",
  arr:{
    name:"damo"
  }
};
function objcopy(obj){
  var newobj={};
  for(var i in obj){    //遍历对象obj
    if(typeof obj[i]=== "object"){       //如果对象的值为对象
      newobj[i] = objcopy(obj[i])    //将对象赋值为新对象
    }else{
      newobj[i]=obj[i];
    }
  }
  return newobj;
}
var newobj= objcopy(obj);
console.log(newobj)                 //一个新的对象与原对象无关系     


  • 写一个数组深拷贝的方法,数组里的值可以是字符串、数字、布尔、数组中的任意项目
var arr=[18, "hello", [2,3,5,6,9],true,];
function objcopy(arr){
  var newarr=[];
  for(var i in arr){    //遍历数组arr
    if( arr[i] instanceof Array){    //条件:如果对象的值为数组
      newarr[i] = objcopy(arr[i])    //将数组内容赋值为新数组
    }else{
      newarr[i]=arr[i];
    }
  }
  return newarr;
}
var newarr= objcopy(arr);
console.log(newarr)                 //一个新的数组与原数组无关系   

  • 写一个深拷贝的方法,拷贝对象以及内部嵌套的值可以是字符串、数字、布尔、数组、json对象中的任意项
 function   arrcopy(num){
   var lala;
  if(num instanceof Array){
    lala = [];
  } else{
    lala={};
  } 
  for(var key in num){
    if(num[key] instanceof Array){
       lala[key] = arrcopy(num[key]);
    }
    else{
       lala[key] = num[key];
    }
  }
  return lala;
}
var lala= arrcopy(arr);

  • 本博客版权归羞涩的涩和饥人谷所有,转载请注明出处
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,211评论 0 4
  • JS使用技巧专题 1开发技巧 1.1函数使用 1.1.1函数声明方式 JS函数的写法总结 http://blog....
    Kevin_Junbaozi阅读 1,067评论 0 11
  • 4.17久违的春雨一倾而泄,似皱眉很久的孩子突然止不住泪水。 前所未有的无助和迷茫。 我不知道我自己想要什么。可能...
    清酒姑娘阅读 308评论 0 0
  • 1. 停车位 瑞典沃尔沃总部有两千多个停车位,早到的人总是把车停在远离办公楼的地方,天天如此。问:“你们的泊位是固...
    37dc9392ece7阅读 222评论 0 0
  • 有一些话,看你站在什么角度说。如果是自己说出来,那是大度,或是自我安慰;如果换个角度,作为第三者说出来,听起来还算...
    钰霏阅读 835评论 1 2