重拾JavaScript(七)-Math&Date

Math

Math是 JavaScript 的原生对象,提供各种数学功能。

Math对象的属性

Math对象的静态属性,提供以下一些数学常数。(这些属性都是只读的)

  • Math.E:自然对数的底数,即常数e
  • Math.LN2:2 的自然对数。
  • Math.LN10:10 的自然对数。
  • Math.LOG2E:以 2 为底的e的对数。
  • Math.LOG10E:以 10 为底的e的对数。
  • Math.PI:常数 π。
  • Math.SQRT1_2:1/2 的平方根(即2的平方根的倒数)。
  • Math.SQRT2:2 的平方根。

一些方法

min()和max()

Math.max方法返回参数之中最大的那个值,Math.min返回最小的那个值。如果参数为空, Math.min返回Infinity, Math.max返回-Infinity

1
2
3
4
Math.max(2, -1, 5) // 5
Math.min(2, -1, 5) // -1
Math.min() // Infinity
Math.max() // -Infinity
舍入方法:Math.ceil(), Math.floor(), Math.round()
  • Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
  • Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
  • Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数;
1
2
3
4
5
6
7
8
9
10
Math.floor(3.2) // 3
Math.floor(-3.2) // -4

Math.ceil(3.2) // 4
Math.ceil(-3.2) // -3

Math.round(0.1) // 0
Math.round(0.5) // 1
Math.round(-1.5) // -1
Math.round(-1.6) // -2
random()

Math.random()返回0到1之间的一个伪随机数,可能等于0,但是一定小于1。

1
2
3
4
5
6
7
8
9
// 返回给定范围内的随机数
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}

// 返回给定范围内的随机整数
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
其他方法
  • Math.abs():绝对值
  • Math.pow():指数运算
  • Math.sqrt():平方根
  • Math.log():自然对数
  • Math.exp():e的指数
  • Math.sin():返回参数的正弦(参数为弧度值)
  • Math.cos():返回参数的余弦(参数为弧度值)
  • Math.tan():返回参数的正切(参数为弧度值)
  • Math.asin():返回参数的反正弦(返回值为弧度值)
  • Math.acos():返回参数的反余弦(返回值为弧度值)
  • Math.atan():返回参数的反正切(返回值为弧度值)

实用示例:

写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255

1
2
3
4
5
6
7
8
9
function getRandIP() {
var ip = []
for (var i = 0; i < 4; i++) {
ip = ip + Math.floor(Math.random() * 256) + "."
}
return ip
}
var ip = getRandIP()
console.log(ip)

写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff

1
2
3
4
5
6
7
8
9
10
11
function getRandColor(length) {
var str = '#'
var dict = '0123456789abcdef'
for (var i = 0; i < 6; i++) {
var index = Math.floor(Math.random() * dict.length)
str += dict[index]
}
return str
}
var color = getRandColor()
console.log(color);

写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。

1
2
3
4
5
6
7
8
9
function getRandStr(len) {
var str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
var str2 = ""
for (var i = 0; i <= len; i++) {
str2 = str2 + str[Math.floor(Math.random() * 61)]
}
return str2
}
console.log(getRandStr(10));

Date

Date对象是 JavaScript 原生的时间库。它以1970年1月1日00:00:00作为时间的零点,可以表示的时间范围是前后各1亿天(单位为毫秒)。

静态方法

Date.now()

Date.now方法返回当前时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数,相当于 Unix 时间戳乘以1000。

1
Date.now() // 1537068255217
Date.parse()

Date.parse方法用来解析日期字符串,返回该时间距离时间零点(1970年1月1日 00:00:00)的毫秒数。

日期字符串应该符合 RFC 2822 和 ISO 8061 这两个标准,即YYYY-MM-DDTHH:mm:ss.sssZ格式,其中最后的Z表示时区。但是,其他格式也可以被解析,请看下面的例子。

1
2
3
4
5
6
Date.parse('Aug 9, 1995')
Date.parse('January 26, 2011 13:51:50')
Date.parse('Mon, 25 Dec 1995 13:30:00 GMT')
Date.parse('Mon, 25 Dec 1995 13:30:00 +0430')
Date.parse('2011-10-10')
Date.parse('2011-10-10T14:48:00')

上面的日期字符串都可以解析。

如果解析失败,返回NaN

1
Date.parse('xxx') // NaN
Date.UTC()

Date.UTC方法接受年、月、日等变量作为参数,返回该时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数。

1
2
3
4
5
6
// 格式
Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]])

// 用法
Date.UTC(2015, 0, 1, 2, 3, 4, 567)
// 1420077784567

该方法的参数用法与Date构造函数完全一致,比如月从0开始计算,日期从1开始计算。区别在于Date.UTC方法的参数,会被解释为 UTC 时间(世界标准时间),Date构造函数的参数会被解释为当前时区的时间。


to类

.toString()

返回一个完整的日期字符串。

.toUTCString()

返回对应的 UTC 时间,也就是比北京时间晚8个小时。

.toISOString()

返回对应时间的 ISO8601 写法。

.toJSON()

返回一个符合 JSON 格式的 ISO 日期字符串,与toISOString方法的返回结果完全相同。

.toDateString()

返回日期字符串(不含小时、分和秒)。

.toTimeString()

返回时间字符串(不含年月日)。

.toLocaleDateString()

返回一个字符串,代表日期的当地写法(不含小时、分和秒)。

.toLocaleTimeString()

返回一个字符串,代表时间的当地写法(不含年月日)。


get类

1
2
3
4
5
6
7
所有这些get方法返回的都是整数,不同方法返回值的范围不一样。
- 分钟和秒:0 到 59
- 小时:0 到 23
- 星期:0(星期天)到 6(星期六)
- 日期:1 到 31
- 月份:0(一月)到 11(十二月)
- 年份:距离1900年的年数
getTime()

返回实例距离1970年1月1日00:00:00的毫秒数,等同于valueOf方法。

getDate()

返回实例对象对应每个月的几号(从1开始)。

getDay()

返回星期几,星期日为0,星期一为1,以此类推。

getYear()

返回距离1900的年数。

getFullYear()

返回四位的年份。

getMonth()

返回月份(0表示1月,11表示12月)。

getHours()

返回小时(0-23)。

getMilliseconds()

返回毫秒(0-999)。

getMinutes()

返回分钟(0-59)。

getSeconds()

返回秒(0-59)。

getTimezoneOffset()

返回当前时间与 UTC 的时区差异,以分钟表示,返回结果考虑到了夏令时因素。


set类

setDate(date)

设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。

setYear(year):

设置距离1900年的年数。

setFullYear(year [, month, date])

设置四位年份。

setHours(hour [, min, sec, ms])

设置小时(0-23)。

setMilliseconds()

设置毫秒(0-999)。

setMinutes(min [, sec, ms])

设置分钟(0-59)。

setMonth(month [, date])

设置月份(0-11)。

setSeconds(sec [, ms])

设置秒(0-59)。

setTime(milliseconds)

设置毫秒时间戳。