# Number Math Date
# Number
# 静态属性
Number.MAX_VALUE < Infinity | 最大值,MAX_VALUE 属性值接近于 1.79E+308。大于 MAX_VALUE 的值代表 "Infinity"。 |
---|---|
Number.MIN_VALUE >0 | 最小值,最接近 0 的正值,MIN_VALUE 的值约为 5e-324。小于 MIN_VALUE ("underflow values") 的值将会转换为 0 |
Number.MAX_SAFE_INTEGER === Math.pow(2,53)-1 | 最大安全整数。 |
Number.MIN_SAFE_INTEGER === -(Math.pow(2,53)-1) | 最小安全整数。 |
Number.NaN 和全局属性 NaN 想同 | 非数字 |
Number.NEGATIVE_INFINITY === -Infinity | 负无穷,在溢出时返回 |
Number.POSITIVE_INFINITY === Infinity | 正无穷,在溢出时返回 |
Number.EPSILON === Math.pow(2, -52) | 表示 1 和比最接近 1 且大于 1 的最小 Number 之间的差别 |
# 静态方法
# 总览
Number() 函数将对象参数转换为表示对象值的数字。
- 如果该值无法转换为合法数字,则返回 NaN。
- 注释:如果参数是 Date 对象,则 Number() 函数返回自 UTC 1970 年 1 月 1 日午夜以来的毫秒数。
x = true; Number(x); // 返回 1
x = false; Number(x); // 返回 0
x = new Date(); Number(x); // 返回 1404568027739
x = "10" Number(x); // 返回 10
x = "10 20" Number(x); // 返回 NaN
Number(new Date("2019-04-15")); // 返回 1506729600000
2
3
4
5
6
方法 | 描述 |
---|---|
Number.parseInt() | 将字符串转换成整型数字,和全局方法 parseInt() (opens new window) 作用一致。 |
Number.parseFloat() | 将字符串转换成浮点数,和全局方法 parseFloat() (opens new window) 作用一致。 |
Number.isInteger() | 判断传递的参数是否为整数。 |
Number.isSafeInteger() | 判断传递的参数是否为安全整数。 |
Number.isFinite() | 判断传递的参数是否为有限数字。 |
Number.isNaN() | 判断传递的参数是否为 isNaN()。 |
# parseInt/parseFloat
一般使用全局函数方式
parseInt() 解析一段字符串并返回数值。允许空格。只返回首个数字
parseFloat() 解析一段字符串并返回数值。允许空格。只返回首个数字
- 如果无法转换为数值,则返回 NaN
parseInt("10"); // 返回 10
parseInt("10.33"); // 返回 10
parseInt("10 20 30"); // 返回 10
parseInt("10 years"); // 返回 10
parseInt("years 10"); // 返回 NaN
---
parseFloat("10"); // 返回 10
parseFloat("10.33"); // 返回 10.33
parseFloat("10 20 30"); // 返回 10
parseFloat("10 years"); // 返回 10
parseFloat("years 10"); // 返回 NaN
2
3
4
5
6
7
8
9
10
11
12
13
#
# isInteger/isSafeInteger
Number.isInteger() 方法用来判断给定的参数是否为整数。
Number.isSafeInteger() 方法用来判断传入的参数值是否是一个“安全整数”
安全整数范围为 -(253 - 1)到 253 - 1 之间的整数,包含 -(253 - 1)和 253 - 1。
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};
Number.isSafeInteger = Number.isSafeInteger || function (value) {
return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
};
Number.isInteger(0); // true
Number.isInteger(-100000); // true
Number.isInteger(0.1); // false
Number.isInteger(Infinity); // false
Number.isInteger("10"); // false
Number.isInteger(true); // false
Number.isInteger([1]); // false
Number.isSafeInteger(Math.pow(2, 53)) // false
Number.isSafeInteger(Math.pow(2, 53) - 1) // true
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# isFinite
Number.isFinite() 方法用来检测传入的参数是否是一个有穷数。
和全局的 isFinite() (opens new window) 函数相比,这个方法不会强制将一个非数值的参数转换成数值,这就意味着,只有数值类型的值,且是有穷的(finite),才返回 true。
if (Number.isFinite === undefined) Number.isFinite = function(value) {
return typeof value === 'number' && isFinite(value);
}
Number.isFinite(Infinity); // false
Number.isFinite(0); // true
Number.isFinite('0'); // false
2
3
4
5
6
# isNaN
Number.isNaN() 方法确定传递的值是否为 NaN。
和全局函数 isNaN() (opens new window) 相比,Number.isNaN() 不会自行将参数转换成数字,只有在参数是值为 NaN 的数字时,才会返回 true。
缺少Number.isNaN函数的情况下, 通过表达式(x != x) 来检测变量x是否是NaN会更加可靠。
isNaN = function(value) {
var n = Number(value);
return n !== n;
};
Number.isNaN = Number.isNaN || function(value) {
return typeof value === "number" && isNaN(value);
}
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0) // true
Number.isNaN("NaN"); // false
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 原型方法
方法 | 描述 |
---|---|
toString() | 返回字符串,可指定进制 |
toFixed() | 返回指定小数位数的表示形式。 |
toPrecision() | 返回一个指定精度的数字。 |
toExponential() | 返回一个数字的指数形式的字符串,如:1.23e+2 |
#
# toString
toString方法可以接受一个参数,表示输出的进制。如果省略这个参数,默认将数值先转为十进制,再输出字符串。
(10).toString(2) // "1010"
(10).toString(8) // "12"
(10).toString(16) // "a"
2
3
# toFixed
toFixed()方法先将一个数转为指定位数的小数,然后返回这个小数对应的字符串。
(10).toFixed(2) // "10.00"
//由于浮点数的原因,小数5的四舍五入是不确定
(10.055).toFixed(2) // 10.05
(10.005).toFixed(2) // 10.01
2
3
4
5
# toPrecision
toPrecision()方法用于将一个数转为指定位数的有效数字。
(12.34).toPrecision(1) // "1e+1"
(12.34).toPrecision(2) // "12"
(12.34).toPrecision(3) // "12.3"
(12.34).toPrecision(4) // "12.34"
(12.34).toPrecision(5) // "12.340"
2
3
4
5
该方法用于四舍五入时不太可靠
#
# toExponential
toExponential() 方法用于将一个数转为科学计数法形式,参数是小数点后有效数字的位数,默认情况下用尽可能多的位数来显示数字。
(10).toExponential() // "1e+1"
(10).toExponential(1) // "1.0e+1"
(10).toExponential(2) // "1.00e+1"
(1234).toExponential() // "1.234e+3"
(1234).toExponential(1) // "1.2e+3"
(1234).toExponential(2) // "1.23e+3"
2
3
4
5
6
7
# Math
# 静态属性
属性 | 描述 |
---|---|
Math.E | 返回算术常量 e,即自然对数的底数(约等于2.718)。 |
Math.LN2 | 返回 2 的自然对数(约等于0.693)。 |
Math.LN10 | 返回 10 的自然对数(约等于2.302)。 |
Math.LOG2E | log2e,返回以 2 为底的 e 的对数(约等于 1.4426950408889634)。 |
Math.LOG10E | log10e,返回以 10 为底的 e 的对数(约等于0.434)。 |
Math.PI | 返回圆周率(约等于3.14159)。 |
Math.SQRT2 | 返回 2 的平方根(约等于 1.414)。 |
Math.SQRT1_2 | 返回 2 的平方根的倒数(约等于 0.707)。 |
# 静态方法
方法 | 描述 |
---|---|
abs(x) | 返回 x 的绝对值。 |
ceil(x) | 对x进行上舍入。 |
floor(x) | 对 x 进行下舍入。 |
round(x) | 四舍五入。 |
max(x,y,z,...,n) | 返回 x,y,z,...,n 中的最高值。 |
min(x,y,z,...,n) | 返回 x,y,z,...,n中的最低值。 |
random() | 返回 0 ~ 1 之间的随机数。 |
pow(x,y) | 返回 x 的 y 次幂。 |
sqrt(x) | 返回数的平方根。 |
exp(x) | 返回 ex |
log(x) | 返回数的自然对数(底为e)。 |
Math.abs(-1) // 1
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.1) // -1
Math.round(-1.5) // -1
Math.max(2, -1, 5) // 5
Math.min(2, -1, 5) // -1
Math.random() // 0.7151307314634323
Math.pow(2, 3) // 8
Math.sqrt(4) // 2
Math.log(Math.E) // 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Math对象还提供一系列三角函数方法
- Math.sin():返回参数的正弦(参数为弧度值)
- Math.cos():返回参数的余弦(参数为弧度值)
- Math.tan():返回参数的正切(参数为弧度值)
- Math.asin():返回参数的反正弦(返回值为弧度值)
- Math.acos():返回参数的反余弦(返回值为弧度值)
- Math.atan():返回参数的反正切(返回值为弧度值)
# Date
以下四种方法同样可以创建 Date 对象:
var d = new Date(); //Tue Dec 14 2021 22:52:09 GMT+0800 (中国标准时间)
var d = new Date(milliseconds); // 毫秒单位的时间戳
var d = new Date(dateString); // 要是能被Date.parse()方法解析的字符串,都可以当作参数。
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
// 年和月是不能省略的,其他参数都可以省略的
// 注意,月份从0开始计算,但是,日数从1开始计算。
// 另外,除了日数的默认值为1,小时、分钟、秒钟和毫秒的默认值都是0。
// 数如果超出了正常范围,会被自动折算,负数会扣去
2
3
4
5
6
7
8
9
10
11
Date实例有一个独特的地方。其他对象求值的时候,都是默认调用.valueOf()方法,但是Date实例求值的时候,默认调用的是toString()方法。这导致对Date实例求值,返回的是一个字符串,代表该实例对应的时间。
两个日期实例对象进行减法运算时,返回的是它们间隔的毫秒数;进行加法运算时,返回的是两个字符串连接而成的新字符串。
var d1 = new Date(2000, 2, 1);
var d2 = new Date(2000, 3, 1);
d2 - d1
// 2678400000
d2 + d1
// "Sat Apr 01 2000 00:00:00 GMT+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"
2
3
4
5
6
7
# 静态方法
- Date.now() 返回毫秒值的时间戳
- Date.parse() 解析日期字符串,返回毫秒值的时间戳。字符串应该符合 RFC 2822 和 ISO 8061 这两个标准,如果解析失败,返回
NaN
。 - Date.UTC() 值为:
year,month,day,hours,minutes,seconds,millisec
返回 1970 年 1 月 1 日 到指定日期的毫秒数
RFC2822 day-of-week DD month-name YYYY HH:mm:ss ±timezone (时区用4位数字表示)
Sat Jul 21 2018 00:00:00 GMT+0800
ISO8601 YYYY-MM-DDTHH:mm:ss.sss±timezone(时区用HH:MM表示)Z为UTC
2018-07-20T00:00:00+08:00
Date.now() //1639494741518
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')
Date.UTC(2012,02,30) //1333065600000
Date.UTC(1970,0,1) // 0
2
3
4
5
6
7
8
9
10
11
12
# 实例方法
Date的实例对象,有几十个自己的方法,除了valueOf和toString,可以分为以下三类。
- to类:从Date对象返回一个字符串,表示指定的时间。
- get类:获取Date对象的日期和时间。
- set类:设置Date对象的日期和时间。
valueOf 方法返回实例对象距离时间零点(1970年1月1日00:00:00 UTC)对应的毫秒数,该方法等同于getTime,预期为数值的场合,Date实例会自动调用该方法
# to类
方法 | 描述 |
---|---|
toString() | 把 Date 对象转换为字符串。Tue Dec 14 2021 23:22:16 GMT+0800 (中国标准时间) |
toUTCString() | 根据世界时,把 Date 对象转换为字符串。比北京时间晚8个小时Tue, 14 Dec 2021 15:21:46 GMT |
toISOString() | 使用 ISO 标准返回字符串的日期格式。2021-12-14T15:22:42.546Z |
toJSON() | 以 JSON 数据格式返回日期字符串。与toISOString 相同 |
toDateString() | 把 Date 对象的日期部分转换为字符串。Tue Dec 14 2021 |
toTimeString() | 把 Date 对象的时间部分转换为字符串。23:24:13 GMT+0800 (中国标准时间) |
toLocaleString() 完整的本地时间,有参数可配置(locales,options,) | 根据本地时间格式,把 Date 对象转换为字符串。2021/12/14 下午11:25:08 |
toLocaleDateString() | 根据本地时间格式,把 Date 对象的日期部分转换为字符串。2021/12/14 |
toLocaleTimeString() | 根据本地时间格式,把 Date 对象的时间部分转换为字符串。下午11:25:08 |
# get 类
方法 | 描述 |
---|---|
getTime() | 返回 1970 年 1 月 1 日至今的毫秒数。 |
getDate() | 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 |
getDay() | 从 Date 对象返回一周中的某一天 (0 ~ 6)。 |
getFullYear() | 从 Date 对象以四位数字返回年份。 |
getMonth() | 从 Date 对象返回月份 (0 ~ 11)。 |
getHours() | 返回 Date 对象的小时 (0 ~ 23)。 |
getMinutes() | 返回 Date 对象的分钟 (0 ~ 59)。 |
getSeconds() | 返回 Date 对象的秒数 (0 ~ 59)。 |
getMilliseconds() | 返回 Date 对象的毫秒(0 ~ 999)。 |
getTimezoneOffset() | 返回本地时间与格林威治标准时间 (GMT) 的分钟差。 |
getUTCDate() | 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。 |
getUTCDay() | 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。 |
getUTCFullYear() | 根据世界时从 Date 对象返回四位数的年份。 |
getUTCMonth() | 根据世界时从 Date 对象返回月份 (0 ~ 11)。 |
getUTCHours() | 根据世界时返回 Date 对象的小时 (0 ~ 23)。 |
getUTCMinutes() | 根据世界时返回 Date 对象的分钟 (0 ~ 59)。 |
getUTCSeconds() | 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。 |
getUTCMilliseconds() | 根据世界时返回 Date 对象的毫秒(0 ~ 999)。 |
所有这些get*方法返回的都是整数,不同方法返回值的范围不一样。
# set类
方法 | 描述 |
---|---|
setDate() | 设置 Date 对象中月的某一天 (1 ~ 31)。 |
setFullYear() | 设置 Date 对象中的年份(四位数字)。 |
setHours() | 设置 Date 对象中的小时 (0 ~ 23)。 |
setMilliseconds() | 设置 Date 对象中的毫秒 (0 ~ 999)。 |
setMinutes() | 设置 Date 对象中的分钟 (0 ~ 59)。 |
setMonth() | 设置 Date 对象中月份 (0 ~ 11)。 |
setSeconds() | 设置 Date 对象中的秒钟 (0 ~ 59)。 |
setTime() | setTime() 方法以毫秒设置 Date 对象。 |
setUTCDate() | 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。 |
setUTCFullYear() | 根据世界时设置 Date 对象中的年份(四位数字)。 |
setUTCHours() | 根据世界时设置 Date 对象中的小时 (0 ~ 23)。 |
setUTCMilliseconds() | 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。 |
setUTCMinutes() | 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。 |
setUTCMonth() | 根据世界时设置 Date 对象中的月份 (0 ~ 11)。 |
setUTCSeconds() | setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。 |
这些方法基本是跟get*方法一一对应的,但是没有setDay方法,因为星期几是计算出来的,而不是设置的。