文章目录
一、Math对象
ECMAScript将一些常用的数学公式和信息封装到了一个对象中——Math对象,为我们实现数学方面的计算功能提供了便捷,而且该对象还提供了辅助完成这些计算的属性和方法
1.1 属性
console.log("自然对数的底数,即常量e的值:" , Math.E);
console.log("10的自然对数:" , Math.LN10);
console.log("2的自然对数:" , Math.LN2);
console.log("以2为底的e的对数:" , Math.LOG2E);
console.log("以10为底的e的对数::" , Math.LOG10E);
console.log("π的值:" , Math.PI);
console.log("2的平方根的倒数:" , Math.SQRT1_2);
console.log("2的平方根:" , Math.SQRT2);
1.2 方法
console.log("最小值:" , Math.min(1,2,3,4));
console.log("最大值:" , Math.max(1,2,3,4));
console.log("向上取整:" , Math.ceil(3.0000001));
console.log("向下取整:" , Math.floor(3.999999999));
console.log("四舍五入取整:" , Math.round(345.678));
console.log("[0,1)范围生成随机数:" , Math.random());
// 参数:两个参数分别是两个端点值,无前后顺序
// 内部实现:max和min的位置也无所谓,只要保证后面加的数是前面小括号中被减的数即可
function random1(min,max){
return Math.round(Math.random() * (max-min) + min);
}
console.log("任意范围生成整数随机数:" , random1(5,10));
//第一个参数是可能值的总数,第二个参数是第一个可能的值
function random2(count,firstnum){
return Math.floor(Math.random() * count + firstnum)
}
console.log("任意范围生成整数随机数:" , random2(6,5));
console.log("绝对值:" , Math.abs(-5));
console.log("平方根:" , Math.sqrt(16));
console.log("第一个参数的第二个参数次幂" , Math.pow(2,5));
//接收的参数为弧度值,角度转弧度公式为:Math.PI/180*角度
console.log("正弦值" , Math.sin(Math.PI/180*90));
console.log("余弦值" , Math.cos(Math.PI/180*90));
console.log("正切值" , Math.tan(Math.PI/180*45));
二、Date对象
ECMAScript中的Date类型是在早期Java中的java.util.Date类基础上构建的。为此,Date类型使用自UTC(国际协调时间)1970年1月1日午夜(零时)开始经过的毫秒数来保存日期。在使用这种数据存储格式的条件下,Date类型保存的日期能够精确到1970年1月1日之前或之后的100 000 000 年。
2.1 创建
因为时间总是在变化,所以每次使用日期对象,都要使用new操作符和Date构造函数创建一个新的日期对象,也就是:
2.1.1 默认参数
var now = new Date();
console.log(now);
- 火狐的结果:
- 谷歌的结果:
2.1.2 传入一个字符参数
因为直接设置,没有涉及到计算,所以不会有从0开始的情况;没有设置的部分会清零;设置错误,显示意外的日期
var d1 = new Date("2018.08.08 20:08:08");
var d2 = new Date("2018.08.08");
var d3 = new Date("2018,08,08");
var d4 = new Date("2018-08-08");
var d5 = new Date("2018/08/08");
var d6 = new Date("2018/13/08"); //看总结
console.log(d1);
console.log(d2);
console.log(d3);
console.log(d4);
console.log(d5);
console.log(d6);
- 火狐的结果:
- 谷歌的结果:
2.1.3 传入多个数值参数
涉及到计算,部分参数有从0开始的情况;没有设置的部分会清零;超出的部分会进1
var d1 = new Date(2008,7,8,20,8,8);
var d2 = new Date(2008,12,8,20,8,8);
var d3 = new Date(2008,7,8);
var d4 = new Date(2008,7,355); //看总结
console.log(d1);
console.log(d2);
console.log(d3);
console.log(d4);
- 火狐的结果:
- 谷歌的结果:
结合上面的这些例子,我们可得到以下几点:
- 每个浏览器支持的日期格式不同,显示日期的格式也不同。
- 传入一个字符参数的时候,最后一个月份写成十三月,程序会报错,这个符合常理
- 传入的是多个数值参数的时候,不再按常识来显示,而是有一套自己的规则,那就是月份和日期的取值从0开始,1月用0来表示,后面的依次提前一个位置,也就是12月为11,这个虽不符合常识,但很符合计算机的原理,之后会在获取日期的get系列中用实例来演示。
- 最后一个有点类似于之前传入一个字符参数的实例中,那个超出范围的例子,但在这里是行得通的,也就是写了超过范围的数值,会发生进位,比如:我写了13月,会进位到下一年的2月份。
- 火狐中日期在取值范围方面和月份有同样的规则,但谷歌没有。
2.2 获取(get系列)
var d = new Date();
// 从日期对象获取信息
console.log(d);
console.log("年份:" , d.getFullYear());
console.log("月份" , d.getMonth()); //从0开始,0表示一月
console.log("日期" , d.getDate());
console.log("星期" , d.getDay());
console.log("------------------------------------------");
console.log("小时" , d.getHours());
console.log("分钟" , d.getMinutes());
console.log("秒钟" , d.getSeconds());
console.log("毫秒" , d.getMilliseconds());
console.log("时间戳" , d.getTime()); //获取从1970年1月1日至今的毫秒
2.3 设置(set系列)
除了获取日期,我们也可以设置日期,有两种方式。各参数中只有星期不能设置,会根据设置的其他参数自动获取,
- 简易模式,简单粗暴,但是会清零时分秒
var d = new Date("2008/8/8");
console.log(d);
- 复杂模式,每个部分都设置一遍,不设置的默认为当前时间的组成部分
var d = new Date();
d.setFullYear(2010); //设置年
d.setMonth(6); //设置月,超过11,累加年,0表示一月
d.setDate(27); //设置日,超过最大日期,累加月,0表示一号
d.setHours(40); //设置小时,超过24,累加天
d.setMinutes(40); //设置分钟,超过60,累加小时
d.setSeconds(40); //设置秒,超过60,累加分钟
d.setMilliseconds(40); //设置毫秒,超过1000,累加秒
//d.setTime(10000); //设置从1970年1月1日过去了多少毫秒,独立的设置日期的方式,相当于set系列其他的组合
console.log(d); //返回更改后的年月日 时分秒
// set系列不像get系列需要拿返回值,但是本身也有返回值
// 返回值是从1970年1月1号 0:0:0到当前设置的日期的毫秒数
console.log(d.getMilliseconds());
2.4 格式化
Date类型还有一些专门用于将日期格式化为字符串的方法,这些方法如下:
var d = new Date();
var d1 = d.toDateString(); //以特定于实现的格式显示星期几、月、日和年
var d2 = d.toTimeString(); //以特定于实现的格式显示时、分、秒和时区
var d3 = d.toLocaleDateString(); //以特定于地区的格式显示星期几、月、日和年
var d4 = d.toLocaleTimeString(); //以特定于实现的格式显示时、分、秒
var d5 = d.toLocaleTimeString(); //以特定于实现的格式显示完整的UTC日期
console.log(d);
console.log(d1);
console.log(d2);
console.log(d3);
console.log(d4);
console.log(d5);
三、总结
(1)Math对象中的方法的实用性很高,用来处理数据很方便。
(2)获取日期时,获取整体日期,直接找创建的日期对象,获取日期中的某一部分,用get系列。
(3)设置日期时,设置整体日期,直接在创建的时候传参,设置日期中的某一部分,用set系列