基礎(chǔ)類型有哪些?復(fù)雜類型有哪些删铃?有什么特征
- 基本類型值(數(shù)值螺戳、布爾值、null undefined string ):指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段碌燕;
var a = 1;
var b = a; //b賦值a,只是簡單的數(shù)值的拷貝
a=3;
console.log(b); //1 - 引用類型值(對象误证、數(shù)組、函數(shù)修壕、正則):指的是那些保存在堆內(nèi)存中的對象愈捅,變量中保存的實際上只是一個指針,這個指針執(zhí)行內(nèi)存中的另一個位置慈鸠,由該位置保存對象改鲫。
var obj1 = {name:'chris',age:'18'};
var obj2 = obj1; // ,obj1賦給obj2的是指針(指向內(nèi)存的地址)林束,然后指針指向兩個地方, 修改obj1稽亏,obj2也會變壶冒。
obj1.name = 'hunger';
console.log(obj2); // {name:'hunger',age:''18}
如下代碼的輸出? 為什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); //fales 因為指向的內(nèi)存地址不同。
console.log(obj1 = obj2); //{a:1,b:2},
console.log(obj1 == obj2);//true 因為obj2將指針賦給了obj1.
寫一個函數(shù)getIntv截歉,獲取從當前時間到指定日期的間隔時間
var str = getIntv("2016-01-08");
console.log(str); // 距除夕還有 20 天 15 小時 20 分 10 秒
function getlntv(str){
var nowtime = new Date();
var t = Date.parse(str);
var spacing =Math.abs( (t-nowtime.getTime())/1000)
var day = Math.floor(spacing/3600/24);
var hours = Math.floor(spacing/3600%24);
var minute = Math.floor(spacing/60%60);
var seconds = Math.floor(spacing%60);
if(t-nowtime.getTime()>0){
return "距離"+str+"還有"+day+"天"+hours+"小時"+minute+"分"+seconds+"秒";
} else{
return "離開"+str+"已經(jīng)"+day+"天"+hours+"小時"+minute+"分"+seconds+"秒";
}
}
把數(shù)字日期改成中文日期
var str = getChsDate('2015-01-08');
console.log(str); // 二零一五年一月八日
function getChsDate(str){
var china =['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一'];
var time = new Date(str);
var year = time.getFullYear()+'';
var month = time.getMonth()+1+'';
var date = time.getDate()+'';
var t = '';
for(i =0;i<year.length;i++){
t +=china[year[i]];
}
return t+'年'+china[month]+'月'+china[date]+'日';
}
寫一個函數(shù)獲取n天前的日期
var lastWeek = getLastNDays(7); // ‘2016-01-08’
var lastMonth = getLastNDays(30); //'2015-12-15'
function getLastNDays(days){
var lasttime = Date.now()-days*24*3600*1000;
var lastdate = new Date(lasttime);
var year = lastdate.getFullYear()+'';
var month = lastdate.getMonth()+1+'';
var date = lastdate.getDate()+'';
return year+'-'+month+'-'+date;
}
完善如下代碼胖腾,用于獲取執(zhí)行時間如:
var Runtime = (function(){
var startTime, endTime, getTime ;
var obj = {
start: function(){
var startTime = Date.now();// 當前時間
},
end: function(){
var endTime = Date.now();// 結(jié)束時間
},
get: function(){
return var getTime = endTime-startTime;// 獲取執(zhí)行時間
}
};
return obj;
}());
Runtime.start();
for(i = 0;i<10000;i++){
console.log(1)
}
Runtime.end();
console.log( Runtime.get() );
樓梯有20級,每次走1級或是2級瘪松,從底走到頂一共有多少種走法咸作?用代碼(遞歸)實現(xiàn)
function fn(sum){
if(sum === 1){
return 1;
}else if(sum === 2){
return 2;
}else if(sum > 2){
return fn(sum-1)+fn(sum-2);
}
}
寫一個json對象深拷貝的方法,json對象可以多層嵌套宵睦,值可以是字符串记罚、數(shù)字、布爾壳嚎、json對象中的任意項(PS:嘗試另外一種方法 var obj2 = JSON.parse( JSON.stringify(obj1) )
function copy(obj){
var newobj = {};
for(var i in obj){
if( typeof(obj[i]) === 'object'){
newobj[i] = copy(obj[i])
}else{
newobj[i] = obj[i]
}
}
return newobj;
}
第二種方法:
function copy(obj){
var newobj = JSON.parse(JSON.stringify(obj));
return newobj;
}