# 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
1
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
1
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
1
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
1
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
1
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"
1
2
3

# toFixed

toFixed()方法先将一个数转为指定位数的小数,然后返回这个小数对应的字符串。

(10).toFixed(2) // "10.00"

//由于浮点数的原因,小数5的四舍五入是不确定
(10.055).toFixed(2) // 10.05
(10.005).toFixed(2) // 10.01
1
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"
1
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"
1
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
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。
// 数如果超出了正常范围,会被自动折算,负数会扣去
1
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)"
1
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 
1

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