0

0

关于JS时间对象和递归问题

jacklove

jacklove

发布时间:2018-05-21 11:30:24

|

1531人浏览过

|

来源于php中文网

原创

js时间对象和递归在学习中经常会遇到,本篇将对其进行讲解。

基础类型有哪些?复杂类型有哪些?有什么特征?
一般来说JS的基础类型主要分为5种,指的是保存在栈内存中的简单数据段;

数字:number

布尔值:true、false

字符串:string

null: 控制针

underfined:有指针却未赋值

复杂类型只有object:包括 数组、对象、函数、正则,指的是保存在堆内存中的对象,变量中保存的实际上只是一个指针(坐标),这个指针执行的是内存中的另一个位置,由该位置保存对象。

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

var obj1 = {a:1, b:2};var obj2 = {a:1, b:2};console.log(obj1 == obj2);    //判断obj1是否等于obj2console.log(obj1 = obj2);      //将obj2赋值给obj1console.log(obj1 == obj2);    //再次判断obj1是否等于obj2因为复杂类型的特性,两个对象分别是不同的位置,所以结果为:falseObject {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天前的日期

AI智研社
AI智研社

AI智研社是一个专注于人工智能领域的综合性平台

下载
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);

本篇对其进行

相关推荐:

dom对象的innerText和innerHTML有什么区别?

一些关于JS的基础问题

如何用前端js模块化编写require.js

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

4

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号