- 基礎類型有哪些?復雜類型有哪些?有什么特征?
一般來說JS的基礎類型主要分為5種,指的是保存在棧內存中的簡單數據段;
- 數字:number
- 布爾值:true、false
- 字符串:string
- null: 控制針
- underfined:有指針卻未賦值
- 復雜類型只有object:包括 數組、對象、函數、正則,指的是保存在堆內存中的對象,變量中保存的實際上只是一個指針(坐標),這個指針執行的是內存中的另一個位置,由該位置保存對象。
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); //判斷obj1是否等于obj2
console.log(obj1 = obj2); //將obj2賦值給obj1
console.log(obj1 == obj2); //再次判斷obj1是否等于obj2
因為復雜類型的特性,兩個對象分別是不同的位置,所以結果為:
false
Object {a: 1, b: 2}
true
代碼
- 寫一個函數getIntv,獲取從當前時間到指定日期的間隔時間
function getIntv(haha){
a= Date.now();
b= Date.parse(haha);
c= b-a;
d= Math.floor(c/(1000*60*60*24));
e= Math.floor((c-d*1000*60*60*24)/(1000*60*60));
f= Math.floor((c-d*1000*60*60*24-e*1000*60*60)/(1000*60));
g= Math.floor((c-d*1000*60*60*24-e*1000*60*60-f*1000*60)/1000);
return ("距除夕還有"+d+"天"+e+"小時"+f+"分鐘"+g+"秒")
}
var str = getIntv("2017-01-27");
console.log(str);
function getChsDate(lala){
num=['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三',
'十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五',
'二十六','二十七','二十八','二十九','三十','三十一']
var damo = lala.split('-')
var b = damo[0].split('')
for( var e =0 ;e< damo.length; e++) {
for(var i = 0 ;i< b.length ; i++) {
for(var f = 0 ;f< num.length ;f++) {
if( damo[e] == f.toString() ) {
damo[e] = num[f]
}
if( b[i] == f.toString() ) {
b[i] = num[f]
}
}
}
}
return ( b.join("")+"年"+damo[1]+"月"+damo[2]+"日" )
}
var str = getChsDate("2015-11-31")
console.log(str)
function getLastNDays(lala) {
var damo = new Date().getTime()-(lala*1000*60*60*24);
var d2 = new Date(damo)
var ad =(d2.getMonth()+1)
console.log(d2.getFullYear()+'-'+ad+'-'+d2.getDate())
}
getLastNDays(40);
var Runtime = (function(){
var a,b,c;
return {
start: function(){
a = Date.now(); //獲取現在的時間
console.log(a);
},
end: function(){
b = Date.now(); //獲取執行后的時間
console.log(b);
},
get: function(){
c = b - a; //兩者相減得出執行代碼的時間。
return (c+"毫秒"); //單位為毫秒
}
};
}());
Runtime.start();
for(var i = 0; i<60000 ;i++ ){
//這里計算i循環60000次所需要的時間
}
Runtime.end();
console.log(Runtime.get());
- 樓梯有200級,每次走1級或是2級,從底走到頂一共有多少種走法?用代碼(遞歸)實現
function fn(sum){
if(sum===1){
return 1;
}
if(sum===2){
return 2;
}
return fn(sum-1)+fn(sum-2)
}
//樓梯的走法相當于(走一步之后+后面的走法)+(走兩步之后+后面的走法)
//走一步或者走兩步是條件
console.log(fn(200)); //數值太大,會卡死
- 寫一個json對象深拷貝的方法,json對象可以多層嵌套,值可以是字符串、數字、布爾、json對象中的任意項
var obj={
sex:18,
vala:"hello",
arr:{
name:"damo"
}
};
function objcopy(obj){
var newobj={};
for(var i in obj){ //遍歷對象obj
if(typeof obj[i]=== "object"){ //如果對象的值為對象
newobj[i] = objcopy(obj[i]) //將對象賦值為新對象
}else{
newobj[i]=obj[i];
}
}
return newobj;
}
var newobj= objcopy(obj);
console.log(newobj) //一個新的對象與原對象無關系
- 寫一個數組深拷貝的方法,數組里的值可以是字符串、數字、布爾、數組中的任意項目
var arr=[18, "hello", [2,3,5,6,9],true,];
function objcopy(arr){
var newarr=[];
for(var i in arr){ //遍歷數組arr
if( arr[i] instanceof Array){ //條件:如果對象的值為數組
newarr[i] = objcopy(arr[i]) //將數組內容賦值為新數組
}else{
newarr[i]=arr[i];
}
}
return newarr;
}
var newarr= objcopy(arr);
console.log(newarr) //一個新的數組與原數組無關系
- 寫一個深拷貝的方法,拷貝對象以及內部嵌套的值可以是字符串、數字、布爾、數組、json對象中的任意項
function arrcopy(num){
var lala;
if(num instanceof Array){
lala = [];
} else{
lala={};
}
for(var key in num){
if(num[key] instanceof Array){
lala[key] = arrcopy(num[key]);
}
else{
lala[key] = num[key];
}
}
return lala;
}
var lala= arrcopy(arr);