1. Date类型常见用例 var now = new Date(); //返回当前时间 var sometime1 = new Date(1465999453000); /
1. Date类型
- 常见用例
var now = new Date(); //返回当前时间 var sometime1 = new Date(1465999453000); //1970年后的毫秒数 Wed Jun 15 2016 22:04:13 GMT+0800 var sometime2 = new Date("5/5/2016"); //等价于 var sometime2 = new Date(Date.parse(""5/5/2016"")); /* * Date.UTC()的参数分别是年份,月份(0-11),日(1-31),小时(0-23),分钟,秒,毫秒,并且为GTM时间 * 前两个参数是必须的,没有天则假的为1,其他假定为0 * */ var sometime3 = new Date(Date.UTC(2016,0)); // Fri Jan 01 2016 08:00:00 GMT+0800 (中国标准时间) 转换为GTM+8 var sometime4 = new Date(Date.UTC(2016,6,6,21,4,45)); //VM654:4 Thu Jul 07 2016 05:04:45 GMT+0800 (中国标准时间) //和上面两个的区别就是,上面是GTM时间,下面是本地时间。 var sometime3 = new Date(2016,0); var sometime4 = new Date(2016,6,6,21,4,45);
- 当创建一个不存在的时间时,浏览器不会报错。
var someDate1 = new Date("6/31/2016"); //Fri Jul 01 2016 00:00:00 GMT+0800 Chrome 51结果 var someDate2 = new Date("Sat May 25 2016 15:20:45 GMT+0800"); //Wed May 25 2016 15:20:45 GMT+0800 (中国标准时间) chrome 51结果,星期错误
Date.parse()常见解析格式如下
- 月/日/年
- 英文月 日 年
- 英文星期 英文月 日 年 时:分:秒 时区
- YYYY-MM-DDTHH:mm:ss.sssZ
var someDate1 = new Date("5/5/2016"); var someDate2 = new Date("May 12,2016"); var someDate3 = new Date("Wed May 25 2016 15:20:45 GMT+0800"); var someDate4 = new Date("2016-05-13T13:34:45");
2. JavaScript变量作用域
JavaScript中没有块级作用域,只有函数作用域。
//函数作用域 var color = "blue"; function changeColor(){ var anotherColor = "red"; function swapColors(){ var tempColor = anotherColor; var anotherColor = color; color = tempColor; } swapColors(); } changeColor(); //块作用域不起作用 if(true){ var color = "blue"; } alert(color); //blue
改变作用域链
- with
- catch
关于作用域链,有兴趣可以参考这篇博客
3. 正则表达式
- 字面量定义一般格式
var expression = / pattern / flags ;
,flags常见的有g全局,i不区分大小写,m多行模式,注意理解多行模式。 - 元字符有
(
)
[
]
{
}
/
^
$
|
?
*
+
.
- 注意字面量定义和构造函数定义的区别。例如
//[bc/]at/
等于//[bc//]at
,这两个都匹配"[bc]at"
4. Function类型
- 函数声明式定义Function,函数表达式定义Function,构造函数定义Function
//声明式 function sum (num1,num2){ return num1+num2; } //表达式 var sum = function(num1,num2){ return num1+num2; } //使用构造函数 var sum = new Function("num1","num2","return num1+num2"); //不推荐使用
JavaScript高级编程中提到声明式和表达式定义是有区别的,声明式会将函数定义提前,也就是说可以在函数调用语句可以写在函数声明语句前面,而表达式定义则不然。但是我通过Chrome 51测试时发现,两者都可以,并无不同。

此处更正一下,是我错了。在控制台调试时会保留前面的代码,换句话说就是第二个sum调用的是第一次调用的函数,如果单独测试你会发现TypeError: sayHi is not a function
:pensive:
- 如果函数重名,后一个声明的会覆盖前一个
- 如上代码,注意sum和sum()的区别
- 函数中特别的关键字
- this
- arguments //函数内参数数组
- callee //指向有arguments对象的函数
- caller //指向调用当前函数的引用
- apply()/call() //区别在于如果函数有参数,apply可以直接传递数组,而call必须一个一个传递。
window.color = "red"; var o = { color:"blue" }; function sayColor(){ alert(this.color); } sayColor(this); //red sayColor(window); //red sayColor(o); //blue
- bind()
window.color = "red"; var o = { color:"blue" }; function sayColor(){ alert(this.color); } var objectSayColor = sayColor.bind(o); objectSayColor(); //blue
5. 基本包装类型
- 不能运行时为基本类型值添加属性和方法
- 使用Object构造函数,返回的也是相应基本类型的包装类型的实例
- 不要使用Boolean对象
var falseObject = new Boolean(false); var result = falseObject && true; alert(result); //true alert(typeof falseObject); //object
- 数值类型注意如下判断
var numberObject = new Number(10); var numberValue = 10; alert(typeof numberObject); //"object" alert(typeof numberValue); //'number" alert(numberObject instanceof Number); //true alert(numberValue instanceof Number); //false