MDN速刷 JS JS指南篇——数字和日期

数字

在 JavaScript 里面,数字均为双精度浮点类型。

除了能够表示浮点数,数字类型也还能表示三种符号值: +Infinity(正无穷)、-Infinity(负无穷)和 NaN (not-a-number,非数字)。

JavaScript 最近添加了 BigInt 的支持,能够用于表示极大的数字。使用 BigInt 的时候有一些注意事项

例如,不能让 BigInt 和 Number 直接进行运算,也不能用 Math 对象去操作 BigInt 数字。

四种数字进制:十进制,二进制,八进制和十六进制。

十进制数字

1234567890;
42;
// 以零开头的数字的注意事项:
0888; // 888 将被当做十进制处理
0777; // 在非严格格式下会被当做八进制处理 (用十进制表示就是511)

十进制可以以 0 开头,后面接其他十进制数字,但是假如下一个接的十进制数字小于 8,那么该数字将会被当做八进制处理。

二进制数字

二进制数字语法是以零为开头,后面接一个小写或大写的拉丁文字母 B(0b 或者是 0B)。

var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648
var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
var FLT_MANTISSA = 0b00000000011111111111111111111111; // 8388607

八进制数字

八进制数字语法是以 0 为开头的。假如 0 后面的数字不在 0 到 7 的范围内,该数字将会被转换成十进制数字。

var n = 0755; // 493
var m = 0644; // 420

在 ECMAScript 5 严格模式下禁止使用八进制语法。八进制语法并不是 ECMAScript 5 规范的一部分,但是通过在八进制数字添加一个前缀 0 就可以被所有的浏览器支持:0644 === 420 而且 “\045” === “%”。在 ECMAScript 6 中使用八进制数字是需要给一个数字添加前缀“0o”。

var a = 0o10; // ES6 :八进制

十六进制

十六进制数字语法是以零为开头,后面接一个小写或大写的拉丁文字母 X(0x 或者是 0X)。

0xfffffffffffffffff; // 295147905179352830000
0x123456789abcdef; // 81985529216486900
0xa; // 10

科学计数法

1e3; // 1000
2e6; // 2000000
0.1e2; // 10

数字对象

内置的 Number 对象有一些有关数字的常量属性,如最大值、不是一个数字和无穷大的。

var biggestNum = Number.MAX_VALUE;
var smallestNum = Number.MIN_VALUE;
var infiniteNum = Number.POSITIVE_INFINITY;
var negInfiniteNum = Number.NEGATIVE_INFINITY;
var notANum = Number.NaN;

部分属性

属性 描述
Number.MAX_VALUE 可表示的最大值
Number.MIN_VALUE 可表示的最小值
Number.NaN 特指”非数字“
Number.NEGATIVE_INFINITY 特指“负无穷”;在溢出时返回
Number.POSITIVE_INFINITY 特指“正无穷”;在溢出时返回
Number.EPSILON 表示 1 和比最接近 1 且大于 1 的最小 Number 之间的差别
Number.MIN_SAFE_INTEGER JavaScript 最小安全整数.
Number.MAX_SAFE_INTEGER JavaScript 最大安全整数.

部分方法

方法 描述
Number.parseFloat() 把字符串参数解析成浮点数,和全局方法 parseFloat() 作用一致.
Number.parseInt() 把字符串解析成特定基数对应的整型数字,和全局方法 parseInt() 作用一致.
Number.isFinite() 判断传递的值是否为有限数字。
Number.isInteger() 判断传递的值是否为整数。
Number.isNaN() 判断传递的值是否为 NaN. More robust version of the original global isNaN().
Number.isSafeInteger() 判断传递的值是否为安全整数。

数字类型原型上的方法

toExponential() 返回一个数字的指数形式的字符串,形如:1.23e+2

toFixed() 返回指定小数位数的表示形式,

var a = 123,
  b = a.toFixed(2); //b="123.00"

toPrecision() 返回一个指定精度的数字。如下例子中,a=123 中,3 会由于精度限制消失

var a = 123,
  b = a.toPrecision(2); //b="1.2e+2"

数学对象

对于内置的 Math 数学常项和函数也有一些属性和方法。 比方说, Math 对象的 PI 属性会有属性值 pi (3.141…),你可以像这样调用它:

Math.PI; // π

同理,标准数学函数也是 Math 的方法。 这些包括三角函数 ​​,对数,指数,和其他函数。比方说你想使用三角函数 sin, 你可以这么写:

Math.sin(1.56);

还有一堆方法…

绝对值、三角函数(参数为弧度制)、反三角函数(参数为弧度制)、双曲三角函数、反双曲三角函数、指数和对数函数、取整函数、随机数函数、平方立方、判断正负等…

日期对象

JavaScript 没有日期数据类型。但是你可以在你的程序里使用 Date 对象和其方法来处理日期和时间。Date 对象有大量的设置、获取和操作日期的方法。 它并不含有任何属性。

JavaScript 处理日期数据类似于 Java。这两种语言有许多一样的处理日期的方法,也都是以 1970 年 1 月 1 日 00:00:00 以来的毫秒数来储存数据类型的。

Date 对象的范围是相对距离 UTC 1970 年 1 月 1 日 的前后 100,000,000 天。

var dateObjectName = new Date([parameters]);

参数可以为以下中任何一种:

  • 无参数 : 创建今天的日期和时间,例如: today = new Date();
  • 一个符合以下格式的表示日期的字符串: “月 日, 年 时:分:秒.” 例如: var Xmas95 = new Date(“December 25, 1995 13:30:00”)。如果你省略时、分、秒,那么他们的值将被设置为 0。
  • 一个年,月,日的整型值的集合,例如: var Xmas95 = new Date(1995, 11, 25)。
  • 一个年,月,日,时,分,秒的集合,例如: var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);.

Date 对象的方法

处理日期时间的 Date 对象方法可分为以下几类:

  • “set” 方法, 用于设置 Date 对象的日期和时间的值。
  • “get” 方法,用于获取 Date 对象的日期和时间的值。
  • “to” 方法,用于返回 Date 对象的字符串格式的值。
  • parse 和 UTC 方法, 用于解析 Date 字符串。

getDay 方法可以返回星期

getMonth()

getFullYear()

var today = new Date();
var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // 设置日和月,注意,月份是0-11
endYear.setFullYear(today.getFullYear()); // 把年设置为今年
var msPerDay = 24 * 60 * 60 * 1000; // 每天的毫秒数
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //返回今年剩下的天数

这个例子中,创建了一个包含今天的日期的 Date 对象,并命名为 today,然后创建了一个名为 endYear 的 Date 对象,并把年份设置为当前年份,接着使用 today 和 endYear 的 getTime 分别获取今天和年底的毫秒数,再根据每一天的毫秒数,计算出了今天到年底的天数,最后四舍五入得到今年剩下的天数。

parse 方法对于从日期字符串赋值给现有的 Date 对象很有用,例如:以下代码使用 parse 和 setTime 分配了一个日期值给 IPOdate 对象:

var IPOdate = new Date();
IPOdate.setTime(Date.parse('Aug 9, 1995'));

评论0

  • 还没有评论,来说点什么吧。