問答
1.基礎(chǔ)類型有哪些事期?復(fù)雜類型有哪些滥壕?有什么特征?
- 基礎(chǔ)類型:數(shù)字兽泣、字符串绎橘、布爾、undefined唠倦、null称鳞。
- 復(fù)雜類型:數(shù)組、對象稠鼻、函數(shù)冈止、正則。
特征:基礎(chǔ)類型是簡單的數(shù)據(jù)保存枷餐,保存在棧內(nèi)存中靶瘸。復(fù)雜類型保存在堆內(nèi)存,而指向這個(gè)復(fù)雜類型數(shù)據(jù)的指針則保存在棧內(nèi)存中毛肋,相對基礎(chǔ)類型來說它的數(shù)據(jù)更大多更大,如果完全保存在棧內(nèi)存中容易出現(xiàn)性能問題屋剑,復(fù)雜類型的賦值所指向的都是同一個(gè)數(shù)據(jù)堆润匙。
2.如下代碼的輸出? 為什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);//false,因?yàn)閛bj1和obj2是指向不同地址的2個(gè)變量唉匾,并不相等孕讳。
console.log(obj1 = obj2);//{a:1, b:2}匠楚,將obj2賦值給obj1,實(shí)際上也就是將obj2的地址賦值給obj1厂财。
console.log(obj1 == obj2);//true芋簿,因?yàn)樯弦徊揭呀?jīng)將obj1賦值給obj2,他們指向同一地址璃饱,所以輸出true与斤。
1.寫一個(gè)函數(shù)getIntv,獲取從當(dāng)前時(shí)間到指定日期的間隔時(shí)間
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+ '小時(shí)'+ minutes+'分' +seconds+ '秒';
console.log(str);
};
getIntv("2016-11-21");
2.把數(shù)字日期改成中文日期
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.寫一個(gè)函數(shù)獲取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.完善如下代碼荚恶,用于獲取執(zhí)行時(shí)間如:
var Runtime = (function(){
var a;
var b;
var obj = {
start: function(){
a =Date.now();
console.log(a);
return(a);//code here ...撩穿, 當(dāng)前時(shí)間
},
end: function(){
b =Date.now();
console.log(b);
return(b);//code here ... 結(jié)束時(shí)間
},
get: function(){
return(b-a);
//code here ... 獲取執(zhí)行時(shí)間
}
};
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級谒撼,從底走到頂一共有多少種走法食寡?用代碼(遞歸)實(shí)現(xiàn)
function walk(n){
if(n===1){
return 1;
}else if(n===2){
return 2 ;
}else{
return (walk(n-1)+walk(n-2));
}
}//10946
樓梯有20級,假設(shè)每次走1級或者2級廓潜,總走法=19級每次走一級或者兩級的走法+18級每次走一級或者兩級的走法抵皱,以此類推,當(dāng)剩下1級時(shí)辩蛋,只有一種走法呻畸,剩兩級時(shí),可以走一級或者兩級堪澎,兩種走法擂错。
6.寫一個(gè)json對象深拷貝的方法,json對象可以多層嵌套樱蛤,值可以是字符串钮呀、數(shù)字、布爾昨凡、json對象中的任意項(xiàng)(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;
}