1. 基础类型有哪些?复杂类型有哪些?有什么特征?
-
基础类型:Number, String, Boolean, undefined, null
特征:基础类型数据直接保存在栈内存中,在做赋值之类的操作时直接对数据本身进行操作,此后各自的修改增删互补相干。 -
复杂类型:Object, Array, Function, RegExp
特征:复杂类型的数据保存在堆内存中,复制的时候只是将栈内存中的“地址”赋值过去,当其中一个进行修改时,实际上是通过“地址”修改了公用的数据。
2. 如下代码的输出?为什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); // false obj1,obj2为两个对象,各自栈内存中保存着不同的“地址”
console.log(obj1 = obj2); // Object{a:1,b:2} 将obj2栈内存中的“地址”赋给obj1
console.log(obj1 == obj2); // true obj1,obj2实际上有了相同的“地址”,所以返回true
##代码题:
#####1. 写一个函数 ```getIntv```,获取从当前时间到指定日期的间隔时间
- ```
function getIntv(str) {
var newYear = Date.parse('2016-02-07');
var now = Date.parse(str);
var t = newYear - now;
var d = parseInt (t/(1000*3600*24));
var h = parseInt ((t%(1000*3600*24))/(1000*3600));
var m = parseInt (((t%(1000*3600*24))%(1000*3600))/(1000*60));
var s = parseInt ((((t%(1000*3600*24))%(1000*3600))%(1000*60))/1000);
return ('距离除夕还有' + d + '天' + h + '小时' + m + '分' + m + '秒');
}
2. 把数字日期改成中文日期
function getChsDate(str) { var numArr = ['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一']; var arr = str.split('-'); var yearArr = arr[0].split(''); var y = ''; for (var i=0; i<yearArr.length; i++) { y += numArr[yearArr[i]]; } var m = numArr[parseInt(arr[1])]; var d = numArr[parseInt(arr[2])]; return (y + '年' + m + '月' + d + '日'); }
#####3. 写一个函数获取n天前的日期
- ```
function getLastDays(n) {
var d1 = Date.now()-(n*24*3600*1000);
var d2 = new Date(d1);
var str = d2.toISOString();
return str.substr(0,10);
}
4. 完善如下代码,用于获取执行时间如:
var Runtime = (function(){ var start,end; var obj = { start: function(){ start = Date.now(); }, end: function(){ end = Date.now(); }, get: function(){ return (end - start) } }; return obj; }()); Runtime.start(); //todo somethint Runtime.end(); console.log( Runtime.get() );
#####5. 楼梯有200级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现
- ```
-
6. 写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项
function deepCopy(obj) {
var newObj = {};
for (var key in obj) {
if (typeof(obj[key]) === 'object') {
newObj[key] = deepCopy(obj[key]);
} else {
newObj[key] = obj[key];
}
}
return newObj;
}