問答題
基礎類型有哪些?復雜類型有哪些?有什么特征?
基礎類型:數值、字符串、布爾值。是指保存在棧內存中的數據。
特殊類型:未定義(undefined)、空值(null)。
復雜類型:數組、函數、正則、對象。是指保存在堆內存中的數據,保存變量的其實是一個指針。
如下代碼的輸出? 為什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);//false obj1和obj2的數據存放在不同的堆內存中,obj1、obj2存放的是數據指針,并不相等。
console.log(obj1 = obj2);// 把obj2的存放地址賦值給obj1,現在兩者相等了
console.log(obj1 == obj2);//true
代碼題
1、寫一個函數getIntv,獲取從當前時間到指定日期的間隔時間。
var str = getIntv("2016-01-08");
console.log(str); // 距除夕還有 20 天 15 小時 20 分 10 秒
函數getIntv
function getIntv(str){
var during = new Date(Math.abs(Date.parse(str)-Date.now())),
year = during.getFullYear(during)-1970,
month = during.getMonth(during)+1,
date = during.getDate(during),
hours = during.getHours(during),
minutes = during.getMinutes(during),
seconds = during.getSeconds(during),
result = '距除夕還有'+year+'年'+month+'月'+date+'日'+hours+'時'+minutes+'分'+seconds+'秒';
return(result);
}
getIntv('2017-1-28');
2、把數字日期改成中文日期。
var str = getChsDate('2015-01-08');
console.log(str); // 二零一五年一月八日
函數 getChsDate
function getChsDate( dateStr ){
var dict = [ "零","一","二","三", "四","五","六","七","八", "九", "十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","二十一","二十二","二十三","二十四","二十五","二十六","二十七","二十八","二十九","三十","三十一"];
var date = dateStr.split('-'),
yy = date[0],
mm = date[1],
dd = date[2];
var yearStr = dict[yy[0]] + dict[yy[1]] + dict[yy[2]] + dict[yy[3]];
var monthStr,dayStr;
monthStr = dict[Math.abs(mm)];
dayStr = dict[Math.abs(dd)];
return yearStr + '年' + monthStr + '月' +dayStr + '日';
}
var str1 = getChsDate('2015-01-08');
console.log(str1);
var str2 = getChsDate('2015-11-08');
console.log(str2);
var str3 = getChsDate('2015-11-28');
console.log(str3);
3、寫一個函數獲取n天前的日期
var lastWeek = getLastNDays(7); // ‘2016-01-08’
var lastMonth = getLastNDays(30); //'2015-12-15'
函數getLastNDays
function getLastNDays(days){
var during = Date.now()-days*24*3600*1000;
var newTime = new Date(during);
var yearStr = newTime.getFullYear(newTime),
monthStr = newTime.getMonth(newTime)+1,
dateStr = newTime.getDate(newTime);
return yearStr+'-'+monthStr+'-'+dateStr;
}
console.log(getLastNDays(7));
console.log(getLastNDays(30));
4、完善如下代碼,用于獲取執行時間如:
var Runtime = (function(){
//code here ...
var obj = {
start: function(){
//code here ..., 當前時間
},
end: function(){
//code here ... 結束時間
},
get: function(){
//code here ... 獲取執行時間
}
};
return obj;
}());
Runtime.start();
//todo somethintRuntime.end();
console.log( Runtime.get() );
函數Runtime
var Runtime = (function(){
var startTime,endTime,during;
var obj = {
start: function(){
startTime = Date.now();
return startTime;
},
end: function(){
endTime = Date.now();
return endTime;
},
get: function(){
during = endTime - startTime;
return during+'ms';
}
};
return obj;
}());
Runtime.start();
// noprotect
for(var i = 0;i<1000;i++){
console.log(i);
}
Runtime.end();
console.log(Runtime.get());
5、樓梯有200級,每次走1級或是2級,從底走到頂一共有多少種走法?用代碼(遞歸)實現。
function fn(n){
if(n === 1){return 1;}
else if(n === 2){return 2;}
else{return fn(n-1)+fn(n-2);}
}
console.log(fn(3)); //3
console.log(fn(20)); //10946
6、寫一個json對象深拷貝的方法,json對象可以多層嵌套,值可以是字符串、數字、布爾、json對象中的任意項。
var obj={
a:{
son1:'aa',
son2:'bb'
},
b:20,
c:[1,2,3],
d:true
};
function deepcopy(obj){
if(typeof obj!='object')
{
return obj;
}
var newobj={};
for(var attr in obj)
{
newobj[attr]=deepcopy(obj[attr]);
}
return newobj;
}
deepCopy