数据类型
基础类型
Undefined
Boolean
Number
String
Null引用类型 Objcet
Function
Array
正则特征
基础类型:保存在栈内存中的简单数据段
引用类型:保存在堆内存中的对象,变量中保存的实际上是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象****访问方式****
基础类型:按值访问,操作的是他们实际保存的值
引用类型:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后 再顺藤摸瓜地找到保存在堆内存中的值;复制
基础类型:会在栈中创建一个新值,然后把值复制到为新变量分配的位置上;
引用类型:复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的位置上
tip : 指针副本和原指针执行存储在堆中的同一个对象,即两个变量引用同一个对象
因此改变其中的一个,将影响另一个检测
基础类型:Typeof
操作符// 返回类型名称
引用类型:Instanceof
操作符// 判断 变量 是否为 引用 实例,返回trun
解析
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); // false--->虽然内容相同,但是指向两个地址
console.log(obj1 = obj2); // [object Object] { a: 1, b: 2 }--->将obj1的地址赋值给obj2
console.log(obj1 == obj2); // true--->此时两个变量指向相同地址
Date 应用
-
写一个函数
getIntv
,获取从当前时间到指定日期的间隔时间var str = getIntv("2016-01-08"); console.log(str); // 距除夕还有 20 天 15 小时 20 分 10 秒
Date.now() 方法 // 返回
自1970年1月1日 00:00:00 UTC到当前时间的
毫秒数
parse() 方法可解析一个日期时间字符串
Date.parse(表示日期和时间的
字符串)// 返回1970/1/1 午夜距离该日期时间的
毫秒数
floor() 方法执行的是向下取整计算:
Math.floor( X任意数值或表达式
) // 返回小于等于 x,且与 x 最接近的
整数 )
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 +"秒";
}
-
把数字日期改成中文日期
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 + '日';
}
-
写一个函数获取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() }
完善代码,用于获取执行时间
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级,从底走到顶一共有多少种走法?用代码(递归)实现
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 用来序列化对象、数组、数值、字符串、布尔值和 null
的方法
JSON.parse()
// 将字符串解析为一个值
JSON.stringify()
// 将指定值转换为字符串区别
JSON对象 VS. JS对象
1 属性名必须用 " "
2 属性值必须是 简单值 / 对象 / 数组拷贝
1 浅拷贝 指针副本和原指针执行存储在堆中的同一个对象
2 深拷贝 指针副本和原指针执行存储在堆中的不同对象,对象的内容相同
应用
- 写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、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)
)
方法二:将原对象转化为字符串,赋值给新对象,再解析新对象的字符串
function copyObj(obj){
var str = JSON.stringify(obj);
return JSON.parse(str);
};