问答
-
基础类型有哪些?复杂类型有哪些?有什么特征?
答:
- 基础类型:
- 数字number
- 字符串string
- 布尔值boolean
- null
- undefined
- 复杂类型:
- 对象object
- 特征:
- 基础类型:变量储存的是值。
- 复杂类型:变量储存的是内存地址。
-
基础类型再赋值的时候拷贝的是值,复杂函数则是地址。
- 基础类型:
-
如下代码的输出? 为什么?
var obj1 = {a:1, b:2}; var obj2 = {a:1, b:2}; console.log(obj1 == obj2);//输出false,因为obj1和obj2的地址不同。 console.log(obj1 = obj2);//输出obj2{a:1, b:2},将obj2地址给了obj1。 console.log(obj1 == obj2);//输出true,因为现在obj1和obj2指向的地址相同。
代码题
-
写一个函数getIntv,获取从当前时间到指定日期的间隔时间
function getIntv (str) { var nowtime = Date.now(); var fut = Date.parse(str); var dtime = Math.abs(fut-nowtime); var day = Math.floor(dtime/(24*3600000)); var hour = Math.floor((dtime-day*24*3600000)/3600000); var min = Math.floor((dtime-(day*24+hour)*3600000)/60000); var sec = Math.floor((dtime-(day*24+hour)*3600000-min*60000)/1000); var result; if(fut>nowtime){ result = "距离"+ str + "还有:"+ day+"天"+ hour+"时"+ min +"分"+ sec +"秒"; } else { result = "距离"+ str + "已过去了:"+ day+"天"+ hour+"时"+ min +"分"+ sec +"秒"; } return result; } var str = getIntv("2017-01-08"); console.log(str); var str = getIntv("2016-01-08"); console.log(str);
-
把数字日期改成中文日期
var str = getChsDate('2015-01-08'); console.log(str); // 二零一五年一月八日
function getChsDate(vl){ var a =['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一']; var t = new Date(vl); var year = t.getFullYear()+''; var month = t.getMonth()+1+''; var date = t.getDate()+''; var n = ''; for(var i =0;i<year.length;i++){ n = n+a[year[i]]; } return n+'年'+a[month]+'月'+a[date]+'日'; } var str = getChsDate('2015-01-08'); console.log(str); // 二零一五年一月八日
写一个函数获取n天前的日期
var lastWeek = getLastNDays(7); // ‘2016-01-08’
var lastMonth = getLastNDays(30); //'2015-12-15'
```
```
var lastWeek = getLastNDays(7); // ‘2016-01-08’
var lastMonth = getLastNDays(30); //'2015-12-15'
function getLastNDays(num){
var t = new Date();
var t2 = new Date(t.getTime()-num*24*3600*1000);
return t2.getFullYear()+'-'+(t2.getMonth()+1)+'-'+t2.getDate();
}
```
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2858982-d116d3a4b0c54be4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
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 somethint
Runtime.end();
console.log( Runtime.get() );
```
```
var Runtime = (function() {
//code here ...
var t1, t2, t3;
var obj = {
start: function() {
//code here ..., 当前时间
t1 = Date.now();
},
end: function() {
//code here ... 结束时间
t2 = Date.now();
},
get: function() {
//code here ... 获取执行时间
t3 = t2 - t1;
return t3;
}
};
return obj;
}());
Runtime.start();
//todo somethint
for(var i = 0;i<10000;i++){
console.log(1);
}
Runtime.end();
console.log(Runtime.get());
```
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2858982-ebe35f8d9372c3e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5. 楼梯有20级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现
```
function f(num){
if(num === 1){
return 1;
}else if(num === 2){
return 2
}else{
return f(num-2)+f(num-1);
}
}
```
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2858982-2adf41f5d495961d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
6. 写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项(PS:尝试另外一种方法 var obj2 = JSON.parse( JSON.stringify(obj1) )
```
var me = {
"name": "oxc",
"age": 23,
"hobby": {
"food": "meat",
"sport": "bicycle",
"number": 24
}
};
function dc(obj1){
var obj2 = JSON.parse(JSON.stringify(obj1));
/* 先把obj1指向的对象转化为字符串,此时obj1指向的对象不变,在把obj1字符串转化为一个对象,这个对象和obj1指向的对象不是同一个 */
return obj2;
}
```
```
var me = {
"name": "oxc",
"age": 23,
"hobby": {
"food": "meat",
"sport": "bicycle",
"number": 24
}
}
function dc(obj1){
var obj2 = {};
for(var key in obj1){
if(typeof obj1[key] == 'object'){
obj2[key] = dc(obj1[key])
}else{
obj2[key] = obj1[key]
}
};
return obj2;
}
```