# 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方法,因为星期几是计算出来的,而不是设置的。