时间对象、引用类型
2016-11-20 本文已影响0人
车万里
问答
1.基础类型有哪些?复杂类型有哪些?有什么特征?
- 基础类型:数字、字符串、布尔、undefined、null。
- 复杂类型:数组、对象、函数、正则。
特征:基础类型是简单的数据保存,保存在栈内存中。复杂类型保存在堆内存,而指向这个复杂类型数据的指针则保存在栈内存中,相对基础类型来说它的数据更大多更大,如果完全保存在栈内存中容易出现性能问题,复杂类型的赋值所指向的都是同一个数据堆。
2.如下代码的输出? 为什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);//false,因为obj1和obj2是指向不同地址的2个变量,并不相等。
console.log(obj1 = obj2);//{a:1, b:2},将obj2赋值给obj1,实际上也就是将obj2的地址赋值给obj1。
console.log(obj1 == obj2);//true,因为上一步已经将obj1赋值给obj2,他们指向同一地址,所以输出true。
1.写一个函数getIntv,获取从当前时间到指定日期的间隔时间
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+ '小时'+ minutes+'分' +seconds+ '秒';
console.log(str);
};
getIntv("2016-11-21");
2.把数字日期改成中文日期
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.写一个函数获取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.完善如下代码,用于获取执行时间如:
var Runtime = (function(){
var a;
var b;
var obj = {
start: function(){
a =Date.now();
console.log(a);
return(a);//code here ..., 当前时间
},
end: function(){
b =Date.now();
console.log(b);
return(b);//code here ... 结束时间
},
get: function(){
return(b-a);
//code here ... 获取执行时间
}
};
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级,从底走到顶一共有多少种走法?用代码(递归)实现
function walk(n){
if(n===1){
return 1;
}else if(n===2){
return 2 ;
}else{
return (walk(n-1)+walk(n-2));
}
}//10946
楼梯有20级,假设每次走1级或者2级,总走法=19级每次走一级或者两级的走法+18级每次走一级或者两级的走法,以此类推,当剩下1级时,只有一种走法,剩两级时,可以走一级或者两级,两种走法。
6.写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项(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;
}