JS的时间对象与引用类型

  基础类型有哪些?复杂类型有哪些?有什么特征?
 
  基础类型:String类型、Null类型、Number类型、Undefined类型、Boolean类型
 
  复杂类型:Object类型
 
  作用:
 
  String类型:String是Unicode字符组成的序列,俗称字符串,可以用双引号或者单引号表示,没有区别,匹配即可
 
  Null类型:Null类型只有一个值:null,表示空指针,也就是不存在的东西
 
  Number类型:JavaScript的数字类型和其它语言有所不同,没有整型和浮点数的区别,统一都是Number类型,可以表示十进制、八进制、十六进制
 
  Undefined类型:Undefined类型也只有一个值undefined,表示变量只被声明,没有被初始化,也就是有这个指针,但是这个指针没有指向任何空间
 
  Boolean类型:Boolean有两个值:1.true2.false
 
  Object类型:对象(object)是JavaScript的核心概念,也是最重要的数据类型。JavaScript的所有数据都可以被视为对象,这也是我们常说的一切皆为对象。
 
  如下代码的输出?为什么?
 
  varobj1={a:1,b:2};
 
  varobj2={a:1,b:2};
 
  console.log(obj1==obj2);//false,由于obj1与obj2所储存的位置不同,所以false。
 
  console.log(obj1=obj2);//obj2赋值给obj1输出Object{a=1,b=2}内容。
 
  console.log(obj1==obj2);//把obj2赋值给obj1,所以obj2与obj1存储的位置是一样的,所以为true。
 
  代码
 
  写一个函数getIntv,获取从当前时间到指定日期的间隔时间。
 
  varstr=getIntv("2016-01-08");
 
  console.log(str);//距除夕还有20天15小时20分10秒
 
  代码:
 
  
 
  varstr=getIntv("2017-01-27");
 
  functiongetIntv(time){
 
  varend=newDate(time);
 
  varnow=newDate();
 
  vartimer=end-now;
 
  varday=Math.floor(timer/(1000606024));
 
  vartimer1=timer%(1000606024)
 
  varhour=Math.floor(timer1/(10006060));
 
  vartimer2=timer1%(10006060);
 
  varmin=Math.floor(timer2/(100060));
 
  vartimer3=timer2%(100060);
 
  varsec=Math.floor(timer3/1000);
 
  return("距"+time+"还有"+day+"天"+hour+"小时"+min+"分钟"+sec+"秒")
 
  }
 
  console.log(str);//距2017-01-27还有20天15小时20分10秒
 
  把数字日期改成中文日期,如:
 
  varstr=getChsDate('2015-01-08');
 
  console.log(str);//二零一五年一月八日
 
  代码:
 
  方法一:
 
  
 
  varstr=getChsDate('2015-01-08');
 
  functiongetChsDate(time){
 
  time=time.replace(/-/g,'');
 
  vararr=[]
 
  for(i=0;i<time.length;i++){
 
  switch(time[i]){
 
  case'0':arr.push('零');break;
 
  case'1':arr.push('一');break;
 
  case'2':arr.push('二');break;
 
  case'3':arr.push('三');break;
 
  case'4':arr.push('四');break;
 
  case'5':arr.push('五');break;
 
  case'6':arr.push('六');break;
 
  case'7':arr.push('七');break;
 
  case'8':arr.push('八');break;
 
  case'9':arr.push('九');break;
 
  }
 
  }
 
  console.log(time);
 
  arr.splice(4,0,'年');
 
  arr.splice(7,0,'月');
 
  arr.splice(10,0,'日');
 
  arr=arr.join('');
 
  returnarr;
 
  }//这种方法有一定缺陷,比如'2016-02-28',输出'二零一六年零二月二八日',读起来很别扭
 
  console.log(str);//二零一五年一月八日
 
  方法二:
 
  functiongetChsDate(date){
 
  varnewDate=date.split("-"),
 
  year=newDate[0],
 
  month=newDate[1],
 
  day=newDate[2];
 
  vardict={"0":"零","1":"一","2":"二","3":"三","4":"四","5":"五","6":"六","7":"七","8":"八","9":"九","10":"十","11":"十一","12":"十二","13":"十三","14":"十四","15":"十五","16":"十六","17":"十七","18":"十八","19":"十九","20":"二十","21":"二十一","22":"二十二","23":"二十三","24":"二十四","25":"二十五","26":"二十六","27":"二十七","28":"二十八","29":"二十九","30":"三十","31":"三十一"};
 
  returndict[year[0]]+dict[year[1]]+dict[year[2]]+dict[year[3]]+'年'+dict[Number(month)]+'月'+dict[Number(day)]+'日';
 
  };
 
  getChsDate('2015-01-08');//"二零一五年一月八日"
 
  写一个函数获取n天前的日期:
 
  varlastWeek=getLastNDays(7);//‘2016-01-08’
 
  varlastMonth=getLastNDays(30);//'2015-12-15'
 
  代码:
 
  varlastWeek=getLastNDays(7);//‘2016-01-08’
 
  varlastMonth=getLastNDays(30);//'2015-12-15'
 
  functiongetLastNDays(dater){
 
  varnow=Date.now();
 
  vartimer=dater2460601000;
 
  varpast=newDate(now-timer);
 
  varyear=past.getFullYear();
 
  varmonth=past.getMonth()+1;//月份从0开始算;
 
  varday=past.getDate();
 
  returnyear+'-'+month+'-'+day;
 
  }
 
  console.log(lastWeek);
 
  console.log(lastMonth);
 
  完善如下代码,如:
 
  
 
  varRuntime=(function(){
 
  //codehere...
 
  return{
 
  start:function(){
 
  //codehere...
 
  },
 
  end:function(){
 
  //codehere...
 
  },
 
  get:function(){
 
  //codehere...
 
  }
 
  };
 
  }());
 
  Runtime.start();
 
  //todosomethint
 
  Runtime.end();
 
  console.log(Runtime.get());
 
  代码:
 
  
 
  varRuntime=(function(){
 
  vartime1;
 
  vartime2;
 
  return{
 
  start:function(){
 
  time1=Date.now();
 
  },
 
  end:function(){
 
  time2=Date.now();
 
  },
 
  get:function(){
 
  return(time2-time1);
 
  }
 
  };
 
  }());
 
  Runtime.start();
 
  for(vari=0;i<100;i++){
 
  console.log(1);//输出100次1
 
  }
 
  Runtime.end();
 
  console.log(Runtime.get());//运行了22ms
 
  楼梯有200级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现
 
  functionfn(num){
 
  if(num==0||num==1){
 
  return1;
 
  }
 
  else{
 
  returnfn(num-1)+fn(num-2);
 
  }
 
  }
 
  console.log(fn(200));
 
  写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项
 
  
 
  varjson={
 
  "name":"yahoo",
 
  "age":"14",
 
  "sex":"man",
 
  "address":
 
  {
 
  "streetAddress":"212ndStreet",
 
  "city":"NewYork",
 
  "state":"NY",
 
  "postalCode":"10021"
 
  }
 
  }
 
  functionJSON(arr){
 
  varnewjson={};
 
  for(keyinarr){
 
  if(typeofarr[key]=="object"){
 
  newjson[key]=JSON(arr[key]);
 
  }
 
  else{
 
  newjson[key]=arr[key];
 
  }
 
  }
 
  returnnewjson;
 
  }
 
  console.log(JSON(json))
 
  写一个数组深拷贝的方法,数组里的值可以是字符串、数字、布尔、数组中的任意项目
 
  vararr=[1,"2",3,[1,2,3,4],true]
 
  functionJSON(arr){
 
  varnewarr=[];
 
  for(keyinarr){
 
  if(typeofarr[key]=='Array'){
 
  newarr[key]=JSON(arr[key]);
 
  }
 
  else{
 
  newarr[key]=arr[key];
 
  }
 
  }
 
  returnnewarr;
 
  }
 
  console.log(JSON(arr))
 
  写一个深拷贝的方法,拷贝对象以及内部嵌套的值可以是字符串、数字、布尔、数组、json对象中的任意项
 
  
 
  varO={
 
  name:"yahoo",
 
  age:14,
 
  other:[1,2,true,"yahoo",3],
 
  man:{
 
  "man1":"woman",
 
  "man2":"man2"
 
  },
 
  aid:true,
 
  address:
 
  {
 
  streetAddress:"212ndStreet",
 
  city:"NewYork",
 
  state:"NY",
 
  postalCode:"10021"
 
  }
 
  }
 
  functionJOSN(O){
 
  varnewarr={};
 
  for(keyinO){
 
  if(typeofO[key]==='Array'){
 
  newarr[key]=JOSN(O[key]);
 
  }
 
  else{
 
  newarr[key]=O[key];
 
  }
 
  }
 
  returnnewarr;
 
  }
 
  console.log(JOSN(O))






本文转载自中文网
 

推荐阅读