基本类型
2016-08-25 本文已影响0人
小周师傅
问题
1.基础类型有哪些?复杂类型有哪些?有什么特征?
- 基本类型:指简单的数据段,按值访问,可以操作保存在变量中的实际的值,有undefined,null,boolean,number,string
- 引用类型:指由多个值构成的对象,按引用访问,有object,array,function
- 复制变量:从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到新变量分配的位置上;当一个变量向另一个变量复制引用类型的值时,会将变量的指针复制一份到新变量分配的空间中,两个变量实际上引用的是同一个对象,改变其中一个变量,另一个也会受到影响。
- 传递参数:ECMAScript中所有函数的参数都是按值传递的,向参数传递基本类型的值时,被传递的值会被复制给一个局部变量;向参数传递引用类型的值时,会将地址传递给局部变量,因此这个局部变量的变化会反映在函数的外部(例子如下)
function addTen(num){
num += 10;
return num;
}
var count = 20;
var result = addTen(count);
alert(count);//20,没有变化
alert(result);//30
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的地址赋给obj
console.log(obj1 == obj2);//ture,obj1和obj2存放的地址相同
代码
//写一个函数getIntv,获取从当前时间到指定日期的间隔时间
var str = getIntv("2016-08-27");
console.log(str);
function getIntv(time) {
var t1 = new Date(),
t2 = new Date(time),
t3 = t2 - t1;
return "距XX还有" + Math.floor(t3 / (24 * 60 * 60 * 1000)) + " 天 " + Math.floor((t3 % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000)) + " 小时 " + Math.floor((t3 % (60 * 60 * 1000)) / (60 * 1000)) + " 分 " + Math.floor((t3 % (60 * 1000) / 1000)) +
" 秒";
}
//把数字日期改成中文日期
function getChsDate(str) {
var chsNum = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"],
arr = str.split('-'),
year = chsNum[arr[0][0]] + chsNum[arr[0][1]] + chsNum[arr[0][2]] + chsNum[arr[0][3]],
mon,
day;
if (chsNum[arr[1][0]] === "零") {
mon = chsNum[arr[1][1]];
} else if (chsNum[arr[1][1]] === "零") {
mon = "十";
} else {
mon = "十" + chsNum[arr[1][1]];
}
if (chsNum[arr[2][0]] === "零") {
day = chsNum[arr[2][1]];
} else if (chsNum[arr[2][1]] === "零") {
day = "十";
} else {
day = chsNum[arr[2][0]] + "十" + chsNum[arr[2][1]];
}
return year + "年" + mon + "月" + day + "日";
}
var str1 = getChsDate('2016-08-10');
var str2 = getChsDate('2016-12-25');
var str3 = getChsDate('2016-10-05');
console.log(str1);
console.log(str2);
console.log(str3);
//写一个函数获取n天前的日期
function getLastNDays(n) {
var t1 = new Date(),
t2 = t1 - n * 24 * 60 * 60 * 1000,
lastDay = new Date(t2),
lastDayStr = lastDay.toLocaleDateString().split('/').join('-');
return lastDayStr;
}
var lastWeek = getLastNDays(7);
var lastMonth = getLastNDays(30);
console.log(lastWeek);
console.log(lastMonth);
//完善如下代码,用于获取执行时间如:
var Runtime = (function() {
var t1, t2, t3; //code here ...
var obj = {
start: function() {
t1 = Date.now(); //code here ..., 当前时间
return t1;
},
end: function() {
t2 = Date.now(); //code here ... 结束时间
return t2;
},
get: function() {
t3 = t2 - t1; //code here ... 获取执行时间
return t3;
}
};
return obj;
}());
Runtime.start();
for (var i = 0; i < 100; i++) {
console.log(i);
} //todo somethint
Runtime.end();
console.log(Runtime.get());
5.楼梯有200级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现
function stepFloor(n) {
if (n === 1) {
return 1;
} else if (n === 2) {
return 2;
} else {
return stepFloor(n - 1) + stepFloor(n - 2);
}
}
6.写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项
function jsonDeepCopy(json) {
var newJson = {};
for (var property in json) {
if (typeof json[property] === 'object') {
newJson[property] = jsonDeepCopy(json[property])
} else {
newJson[property] = json[property];
}
}
return newJson;
}
var jsonPerson = {
"name": 'Jack',
"age": 24,
"family": {
"Fa": "Bob",
"Ma": "Lisa"
}
}
console.log(jsonDeepCopy(jsonPerson));