问答题
基础类型有哪些?复杂类型有哪些?有什么特征?
基础类型:数值、字符串、布尔值。是指保存在栈内存中的数据。
特殊类型:未定义(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;
}