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 日午夜以来的毫秒数。
    1. x = true; Number(x); // 返回 1
    2. x = false; Number(x); // 返回 0
    3. x = new Date(); Number(x); // 返回 1404568027739
    4. x = "10" Number(x); // 返回 10
    5. x = "10 20" Number(x); // 返回 NaN
    6. Number(new Date("2019-04-15")); // 返回 1506729600000
    | 方法 | 描述 | | —- | —- | | Number.parseInt() | 将字符串转换成整型数字,和全局方法 parseInt() 作用一致。 | | Number.parseFloat() | 将字符串转换成浮点数,和全局方法 parseFloat()
    作用一致。 | | Number.isInteger() | 判断传递的参数是否为整数。 | | Number.isSafeInteger() | 判断传递的参数是否为安全整数。 | | Number.isFinite() | 判断传递的参数是否为有限数字。 | | Number.isNaN() | 判断传递的参数是否为 isNaN()。 |

parseInt/parseFloat

一般使用全局函数方式

parseInt() 解析一段字符串并返回数值。允许空格。只返回首个数字
parseFloat() 解析一段字符串并返回数值。允许空格。只返回首个数字

  • 如果无法转换为数值,则返回 NaN ```javascript 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. <a name="VG3So"></a>
  2. ###
  3. <a name="x6kAp"></a>
  4. ### isInteger/isSafeInteger
  5. Number.isInteger() 方法用来判断给定的参数是否为整数。<br />Number.isSafeInteger() 方法用来判断传入的参数值是否是一个“安全整数”
  6. > 安全整数范围为 -(253 - 1)到 253 - 1 之间的整数,包含 -(253 - 1)和 253 - 1。
  7. ```javascript
  8. Number.isInteger = Number.isInteger || function(value) {
  9. return typeof value === "number" &&
  10. isFinite(value) &&
  11. Math.floor(value) === value;
  12. };
  13. Number.isSafeInteger = Number.isSafeInteger || function (value) {
  14. return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
  15. };
  1. Number.isInteger(0); // true
  2. Number.isInteger(-100000); // true
  3. Number.isInteger(0.1); // false
  4. Number.isInteger(Infinity); // false
  5. Number.isInteger("10"); // false
  6. Number.isInteger(true); // false
  7. Number.isInteger([1]); // false
  8. Number.isSafeInteger(Math.pow(2, 53)) // false
  9. Number.isSafeInteger(Math.pow(2, 53) - 1) // true

isFinite

Number.isFinite() 方法用来检测传入的参数是否是一个有穷数。

和全局的 isFinite() 函数相比,这个方法不会强制将一个非数值的参数转换成数值,这就意味着,只有数值类型的值,且是有穷的(finite),才返回 true。

  1. if (Number.isFinite === undefined) Number.isFinite = function(value) {
  2. return typeof value === 'number' && isFinite(value);
  3. }
  1. Number.isFinite(Infinity); // false
  2. Number.isFinite(0); // true
  3. Number.isFinite('0'); // false

isNaN

Number.isNaN() 方法确定传递的值是否为 NaN。

和全局函数 isNaN() 相比,Number.isNaN() 不会自行将参数转换成数字,只有在参数是值为 NaN 的数字时,才会返回 true。 缺少Number.isNaN函数的情况下, 通过表达式(x != x) 来检测变量x是否是NaN会更加可靠。

  1. isNaN = function(value) {
  2. var n = Number(value);
  3. return n !== n;
  4. };
  5. Number.isNaN = Number.isNaN || function(value) {
  6. return typeof value === "number" && isNaN(value);
  7. }
  1. isNaN(NaN); // true
  2. isNaN(undefined); // true
  3. isNaN({}); // true
  4. Number.isNaN(NaN); // true
  5. Number.isNaN(Number.NaN); // true
  6. Number.isNaN(0 / 0) // true
  7. Number.isNaN("NaN"); // false

原型方法

方法 描述
toString() 返回字符串,可指定进制
toFixed() 返回指定小数位数的表示形式。
toPrecision() 返回一个指定精度的数字。
toExponential() 返回一个数字的指数形式的字符串,如:1.23e+2

toString

toString方法可以接受一个参数,表示输出的进制。如果省略这个参数,默认将数值先转为十进制,再输出字符串。

  1. (10).toString(2) // "1010"
  2. (10).toString(8) // "12"
  3. (10).toString(16) // "a"

toFixed

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

  1. (10).toFixed(2) // "10.00"
  2. //由于浮点数的原因,小数5的四舍五入是不确定
  3. (10.055).toFixed(2) // 10.05
  4. (10.005).toFixed(2) // 10.01

toPrecision

toPrecision()方法用于将一个数转为指定位数的有效数字。

  1. (12.34).toPrecision(1) // "1e+1"
  2. (12.34).toPrecision(2) // "12"
  3. (12.34).toPrecision(3) // "12.3"
  4. (12.34).toPrecision(4) // "12.34"
  5. (12.34).toPrecision(5) // "12.340"

该方法用于四舍五入时不太可靠

toExponential

toExponential() 方法用于将一个数转为科学计数法形式,参数是小数点后有效数字的位数,默认情况下用尽可能多的位数来显示数字。

  1. (10).toExponential() // "1e+1"
  2. (10).toExponential(1) // "1.0e+1"
  3. (10).toExponential(2) // "1.00e+1"
  4. (1234).toExponential() // "1.234e+3"
  5. (1234).toExponential(1) // "1.2e+3"
  6. (1234).toExponential(2) // "1.23e+3"

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)。
  1. Math.abs(-1) // 1
  2. Math.floor(3.2) // 3
  3. Math.floor(-3.2) // -4
  4. Math.ceil(3.2) // 4
  5. Math.ceil(-3.2) // -3
  6. Math.round(0.1) // 0
  7. Math.round(0.5) // 1
  8. Math.round(-1.1) // -1
  9. Math.round(-1.5) // -1
  10. Math.max(2, -1, 5) // 5
  11. Math.min(2, -1, 5) // -1
  12. Math.random() // 0.7151307314634323
  13. Math.pow(2, 3) // 8
  14. Math.sqrt(4) // 2
  15. Math.log(Math.E) // 1

Math对象还提供一系列三角函数方法

  • Math.sin():返回参数的正弦(参数为弧度值)
  • Math.cos():返回参数的余弦(参数为弧度值)
  • Math.tan():返回参数的正切(参数为弧度值)
  • Math.asin():返回参数的反正弦(返回值为弧度值)
  • Math.acos():返回参数的反余弦(返回值为弧度值)
  • Math.atan():返回参数的反正切(返回值为弧度值)

Date

以下四种方法同样可以创建 Date 对象:

  1. var d = new Date(); //Tue Dec 14 2021 22:52:09 GMT+0800 (中国标准时间)
  2. var d = new Date(milliseconds); // 毫秒单位的时间戳
  3. var d = new Date(dateString); // 要是能被Date.parse()方法解析的字符串,都可以当作参数。
  4. var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
  5. // 年和月是不能省略的,其他参数都可以省略的
  6. // 注意,月份从0开始计算,但是,日数从1开始计算。
  7. // 另外,除了日数的默认值为1,小时、分钟、秒钟和毫秒的默认值都是0。
  8. // 数如果超出了正常范围,会被自动折算,负数会扣去

Date实例有一个独特的地方。其他对象求值的时候,都是默认调用.valueOf()方法,但是Date实例求值的时候,默认调用的是toString()方法。这导致对Date实例求值,返回的是一个字符串,代表该实例对应的时间。

两个日期实例对象进行减法运算时,返回的是它们间隔的毫秒数;进行加法运算时,返回的是两个字符串连接而成的新字符串。

  1. var d1 = new Date(2000, 2, 1);
  2. var d2 = new Date(2000, 3, 1);
  3. d2 - d1
  4. // 2678400000
  5. d2 + d1
  6. // "Sat Apr 01 2000 00:00:00 GMT+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"

静态方法

  • Date.now() 返回毫秒值的时间戳
  • Date.parse() 解析日期字符串,返回毫秒值的时间戳。字符串应该符合 RFC 2822 和 ISO 8061 这两个标准,如果解析失败,返回NaN
  • Date.UTC() 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

  1. Date.now() //1639494741518
  2. Date.parse('Aug 9, 1995')
  3. Date.parse('January 26, 2011 13:51:50')
  4. Date.parse('Mon, 25 Dec 1995 13:30:00 GMT')
  5. Date.parse('Mon, 25 Dec 1995 13:30:00 +0430')
  6. Date.parse('2011-10-10')
  7. Date.parse('2011-10-10T14:48:00')
  8. Date.UTC(2012,02,30) //1333065600000
  9. Date.UTC(1970,0,1) // 0

实例方法

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

JSON

  1. 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
  2. 原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)。
  3. 字符串必须使用双引号表示,不能使用单引号。
  4. 对象的键名必须放在双引号里面。
  5. 数组或对象最后一个成员的后面,不能加逗号。

JSON.stringify()

JSON.stringify()方法用于将一个值转为 JSON 字符串。该字符串符合 JSON 格式,并且可以被JSON.parse()方法还原。

  1. JSON.stringify('abc') // ""abc""
  2. JSON.stringify(1) // "1"
  3. JSON.stringify(false) // "false"
  4. JSON.stringify([]) // "[]"
  5. JSON.stringify({}) // "{}"
  6. JSON.stringify([1, "false", false]) // '[1,"false",false]'
  7. JSON.stringify({ name: "张三" }) // '{"name":"张三"}'

第2个参数

JSON.stringify()方法还可以接受一个数组,作为第二个参数,指定参数对象的哪些属性需要转成字符串。

  1. var obj = {
  2. 'prop1': 'value1',
  3. 'prop2': 'value2',
  4. 'prop3': 'value3'
  5. };
  6. var selectedProperties = ['prop1', 'prop2'];
  7. JSON.stringify(obj, selectedProperties) // "{"prop1":"value1","prop2":"value2"}"

第二个参数还可以是一个函数,用来更改JSON.stringify()的返回值。
注意,这个处理函数是递归处理所有的键。递归处理中,每一次处理的对象,都是前一次返回的值。
如果处理函数返回undefined或没有返回值,则该属性会被忽略。

  1. function f(key, value) {
  2. if (typeof value === "number") {
  3. value = 2 * value;
  4. }
  5. return value;
  6. }
  7. JSON.stringify({ a: 1, b: 2 }, f)
  8. // '{"a": 2,"b": 4}'

第3个参数

默认返回的是单行字符串,对于大型的 JSON 对象,可读性非常差。第三个参数使得每个属性单独占据一行,并且将每个属性前面添加指定的前缀。

  1. // 默认输出
  2. JSON.stringify({ p1: 1, p2: 2 })
  3. // JSON.stringify({ p1: 1, p2: 2 })
  4. // 分行输出
  5. JSON.stringify({ p1: 1, p2: 2 }, null, '\t')
  6. // {
  7. // "p1": 1,
  8. // "p2": 2
  9. // }

第三个属性如果是一个数字,则表示每个属性前面添加的空格。

JSON.parse()

JSON.parse()方法用于将 JSON 字符串转换成对应的值。如果传入的字符串不是有效的 JSON 格式,JSON.parse()方法将报错。
为了处理解析错误,可以将JSON.parse()方法放在try…catch代码块中。

  1. try {
  2. JSON.parse("'String'");
  3. } catch(e) {
  4. console.log('parsing error');
  5. }

JSON.parse()方法可以接受一个处理函数,作为第二个参数,用法与JSON.stringify()方法类似。