數(shù)據(jù)類型
基礎(chǔ)類型
Undefined
Boolean
Number
String
Null引用類型 Objcet
Function
Array
正則特征
基礎(chǔ)類型:保存在棧內(nèi)存中的簡單數(shù)據(jù)段
引用類型:保存在堆內(nèi)存中的對象言秸,變量中保存的實際上是一個指針软能,這個指針執(zhí)行內(nèi)存中的另一個位置,由該位置保存對象****訪問方式****
基礎(chǔ)類型:按值訪問举畸,操作的是他們實際保存的值
引用類型:按引用訪問查排,當查詢時,我們需要先從棧中讀取內(nèi)存地址抄沮,然后 再順藤摸瓜地找到保存在堆內(nèi)存中的值跋核;復(fù)制
基礎(chǔ)類型:會在棧中創(chuàng)建一個新值,然后把值復(fù)制到為新變量分配的位置上叛买;
引用類型:復(fù)制的是存儲在棧中的指針砂代,將指針復(fù)制到棧中未新變量分配的位置上
tip : 指針副本和原指針執(zhí)行存儲在堆中的同一個對象,即兩個變量引用同一個對象
因此改變其中的一個率挣,將影響另一個檢測
基礎(chǔ)類型:Typeof
操作符// 返回類型名稱
引用類型:Instanceof
操作符// 判斷 變量 是否為 引用 實例刻伊,返回trun
解析
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); // false--->雖然內(nèi)容相同,但是指向兩個地址
console.log(obj1 = obj2); // [object Object] { a: 1, b: 2 }--->將obj1的地址賦值給obj2
console.log(obj1 == obj2); // true--->此時兩個變量指向相同地址
Date 應(yīng)用
-
寫一個函數(shù)
getIntv
,獲取從當前時間到指定日期的間隔時間var str = getIntv("2016-01-08"); console.log(str); // 距除夕還有 20 天 15 小時 20 分 10 秒
Date.now() 方法 // 返回
自1970年1月1日 00:00:00 UTC到當前時間的
毫秒數(shù)
parse() 方法可解析一個日期時間字符串
Date.parse(表示日期和時間的
字符串)// 返回1970/1/1 午夜距離該日期時間的
毫秒數(shù)
floor() 方法執(zhí)行的是向下取整計算:
Math.floor( X任意數(shù)值或表達式
) // 返回小于等于 x捶箱,且與 x 最接近的
整數(shù) )
function getIntv(time){
var t1 = Date.parse(time)-Date.now();
var t2 = t1/(24*60*60*1000);
var d = Math.floor(t2);
var h = Math.floor((t2-d)*24);
var m = Math.floor(((t2-d)*24)-h)*60;
var s = Math.floor(((t2-d)*24)*60-m)*60;
return time = "距離" + time + "還有" + d + "天" + h+"小時" + m+ "分鐘" + s +"秒";
}
-
把數(shù)字日期改成中文日期
var str = getChsDate('2015-01-08'); console.log(str); // 二零一五年一月八日
dateObj.getFullYear() // 返回一個
指定日期對象的
年份
dateObj.getFullMonth() // 返回一個指定日期對象的
月份
dateObj.getFullMonth() // 返回一個指定日期對象的
月份中的第幾天
function getChsDate(time){
var date = ['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一'];
var a = new Date(time);
var b = a.getFullYear()+'';
var year = '' ;
for(var i=0 ; i<b.length;i++){
year = year + date[b[i]];
};
var month = date[a.getMonth()+1 ];
var day = date[a.getDate()];
return year + '年' + month + '月' + day + '日';
}
-
寫一個函數(shù)獲取n天前的日期
var lastWeek = getLastNDays(7); // ‘2016-01-08’
var lastMonth = getLastNDays(30); //'2015-12-15'function getLastDays(time){ var a = Date.now(); var b = time*(24*60*60*1000) var d = a - b ; var ld = new Date(d); return ld.getFullYear()+'-'+(ld.getMonth()+1)+'-'+ld.getDate() }
完善代碼智什,用于獲取執(zhí)行時間
var Runtime = (function(){
var st;
var ed;
var rt;
var obj = {
start : function(){
st = Date.now();
},
end : function(){
ed =Date.now();
},
get : function(){
return rt = ed - st;
}
};
return obj;
}() );
Runtime.start();
for(var i=0;i<1000;i++){
console.log(1);
};
Runtime.end();
console.log( Runtime.get() );樓梯有20級,每次走1級或是2級讼呢,從底走到頂一共有多少種走法撩鹿?用代碼(遞歸)實現(xiàn)
function getWay(n){
if(n === 1){
return 1;
}else if(n === 2){
return 2;
}else{
return getWay ( n - 1 ) + getWay ( n - 2);
}
}
JSON
定義
1 JSON 是一種語法(即 文本格式)。
2 用來序列化對象悦屏、數(shù)組节沦、數(shù)值、字符串础爬、布爾值和 null
的方法
JSON.parse()
// 將字符串解析為一個值
JSON.stringify()
// 將指定值轉(zhuǎn)換為字符串區(qū)別
JSON對象 VS. JS對象
1 屬性名必須用 " "
2 屬性值必須是 簡單值 / 對象 / 數(shù)組拷貝
1 淺拷貝 指針副本和原指針執(zhí)行存儲在堆中的同一個對象
2 深拷貝 指針副本和原指針執(zhí)行存儲在堆中的不同對象甫贯,對象的內(nèi)容相同
應(yīng)用
- 寫一個json對象深拷貝的方法,json對象可以多層嵌套看蚜,值可以是字符串叫搁、數(shù)字、布爾供炎、json對象中的任意項
方法一:遍歷原對象渴逻,逐項拷貝到新對象
function copyObject(obj){
var newobj = { };
for(key in obj){
if(typeof obj[key] == 'object'){
newobj[key] = copyObject(obj[key]);
}else{
newobj[key] = obj[key];
}
};
return obj2;
};
(PS:嘗試另外一種方法var obj2 = JSON.parse( JSON.stringify(obj1)
)
方法二:將原對象轉(zhuǎn)化為字符串,賦值給新對象音诫,再解析新對象的字符串
function copyObj(obj){
var str = JSON.stringify(obj);
return JSON.parse(str);
};