問題
1. 基礎(chǔ)類型有哪些?復(fù)雜類型有哪些?有什么特征?
- 基本類型:( undefined、null、Boolean、Number、String )指的是,保存在棧內(nèi)存中的簡單數(shù)據(jù)段。
- 復(fù)雜類型:( Object、Array、Function、正則......) 指的是,保存在堆內(nèi)存中的對象,變量中保存的實際上只是一個指針,這個指針指向內(nèi)存的另一個位置,由該位置保存對象。
2. 如下代碼輸出?為什么?
var obj1 = { a:1, b:2 };
var obj2 = { a:1, b:2 };
console.log(obj1 == obj2); // 雖然 obj1 和 obj2 內(nèi)容一樣,但是地址不同,因此,不是同一個對象。
console.log(obj1 = obj2); // 賦值操作 (賦的值是,b 的地址)
console.log(obj1 == obj2); // 既然地址一樣,也就是同一個對象了

task19-2.png
代碼
1. 寫一個函數(shù) getInv,獲取從當(dāng)前時間到指定日期的間隔時間
var str = getIntv("2017-01-28");
console.log(str);
function getIntv(specifiedTime){
var perDay = 24 * 60 * 60 * 1000,
perHour = 60 * 60 * 1000,
perMinute = 60 * 1000;
var intervalsTime = Date.parse(specifiedTime) - Date.now();
var days = Math.floor(intervalsTime / perDay);
var hours = Math.floor((intervalsTime - days * perDay) / perHour);
var minutes = Math.floor((intervalsTime - days * perDay - hours * perHour) / perMinute);
var seconds = Math.floor((intervalsTime - days * perDay - hours * perHour - minutes * perMinute) / 1000);
var result = "距離2017年春節(jié)還有:" + days + "天" + hours + "小時" + minutes + "分鐘" + seconds + "秒";
return result;
}

task19-pic1.png
2. 把數(shù)字日期改為中文日期
var dateExample = convertDate('2015-01-08');
console.log(dateExample); // 二零一五年一月八日
function convertDate(dateString) {
var dateDictionary = {
"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": "三十一"
}
var dateArray = dateString.split('-'),
year = dateArray[0],
month = dateArray[1],
day = dateArray[2];
var yearConverted = dateDictionary[year[0]] + dateDictionary[year[1]] + dateDictionary[year[2]] + dateDictionary[year[3]] + "年",
monthConverted = dateDictionary[Number(month)] + "月",
dayConverted = dateDictionary[Number(day)] + "日";
return (yearConverted + monthConverted + dayConverted);
}

task19-pic2.png
3. 寫一個函數(shù)獲取 n 天前的日期
var lastWeek = getLastNDays(7);
var lastMonth = getLastNDays(30);
function getLastNDays(Days) {
var intervalTimes = Days * 24 * 3600 * 1000,
currentTime = Date.now(),
fewDaysAgoTime = currentTime - intervalTimes;
var tempTime = new Date(fewDaysAgoTime),
fewDaysAgoString = tempTime.toLocaleDateString(); // XXXX/XX/XX
var tempTimeArray = fewDaysAgoString.split("/"),
result = tempTimeArray.join("-");
return result;
}

task19-pic3.png
4. 完善如下代碼,用于獲取執(zhí)行時間如:
var Runtime = (function(){
var obj = {
start: function(){
startTime = Date.now();
return startTime;
},
end: function(){
endTime = Date.now();
return endTime;
},
get: function(){
var intervalTime = (endTime - startTime) / 1000;
return (intervalTime + "秒");
}
};
return obj;
}());
Runtime.start();
// todo something
for(var i = 0; i < 1000; i++){
console.log("testing");
}
Runtime.end();
console.log( Runtime.get() );

task19-pic4.png
5. 樓梯有 200 級,每次走 1 級或是 2級,從底走到頂一共有多少種走法?用代碼(遞歸)實現(xiàn)
function resolveStairs(steps){
if(steps == 1){
return 1;
}else if(steps == 2){
return 2;
}else{
return resolveStairs(steps - 1) + resolveStairs(steps - 2);
}
}
console.log(resolveStairs(20));

樓梯-遞歸.png
6. 寫一個 json 對象深拷貝的方法,json 對象可以多層嵌套,值可以是字符串、數(shù)字、布爾、json 對象中的任意項
function deepCopy(obj){
var tempObj = {};
for(var key in obj){
if(typeof(obj[key]) === 'object'){
tempObj[key] = deepCopy(obj[key]);
}else{
tempObj[key] = obj[key];
}
}
return tempObj;
}