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); 兩個物件分別是不同的位置,所以結果為: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天前的日期
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時間對象與遞迴問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!