数字
JavaScript中的数字都是双精度浮点型
除了浮点数外,数字还可以表示全局属性-Infinity
+Infinity
和 NaN
表示
进制表示
数字可以用二进制,八进制,十进制和十六进制表示
-
二进制(Binary numbers))
0b(binary)开头
console.log(0b1001); // 9
-
八进制(Octal numbers)
以0o(Octal)开头
console.log(0o1001); //513
只用前缀0也可以表示八进制,且被所有浏览器支持
console.log(01001); //513
-
十进制(Decimal numbers)
-
十六进制(Hexadecimal numbers)
0x开头
console.log(0x1001); //4097
指数表示
console.log(2E2); //200 2*10的二次方
console.log(-1111E111111111111); // -Infinity
- 发生下溢会返回-Infinity
console.log(1111E111111111111); // Infinity
- 发生上溢时返回+Infinity
数字对象
数字对象中定义了一些可以用于常量表示的属性和与数字有关的方法
属性
可用于常量表示的属性命名格式为大写字母加下划线,不同于变量命名的驼峰命名
console.log(Number.MAX_VALUE); // 可表示的最大值
console.log(Number.MIN_VALUE); // 可表示的最小值
console.log(Number.MAX_SAFE_INTEGER); // 最大安全整数
console.log(Number.MIN_SAFE_INTEGER); // 最小安全整数
console.log(isNaN(Number.NaN)); //true
console.log(Number.NaN === NaN); // false
NaN 只能用函数isNaN()
判断,与其他数据类型做比较都会返回false,即使是与其本身
方法
与数字对象的类型判断和类型转换有关
Number.parseInt(a)
- 将一个字符串解析为整数
- 与全局方法
parseInt(a)
相同
Number.parseFloat(a)
- 将一个字符串解析为浮点数
- 与全局方法
parseFloat(a)
相同
Number.isInteger(a)
- 判断传递的值是否为整数
Number.isNaN(a)
- 判断传递的数值是否是NaN
- 与全局方法isNaN()相同
let a = '111.111';
console.log(Number.parseFloat(a)); // 111.111
console.log(Number.parseInt(a)); //111
console.log(parseInt(a));
console.log(Number.isInteger(a)); //false
console.log(Number.isInteger(Number.parseInt(a))); // true
console.log(Number.isInteger(Number.parseFloat(a))); // false
console.log(Number.isNaN(Number.NaN)); // true
数学对象
定义了许多与数字运算有关的方法
console.log(Math.PI);
console.log(Math.sin(0.5)); // 计算sin值
console.log(Math.abs(-1)); //1 取绝对值
console.log(Math.floor(2.5)); // 2 向下取整
console.log(Math.ceil(2.5)); //3 向上取整
console.log(Math.round(2.5)); //3 四舍五入
console.log(Math.min(1, 2, 3, 4)); // 1 取最小值,这里的参数不能为数组
console.log(Math.max(1, 2, 3, 4)); //4 取最大值,参数不能为数组
console.log(Math.random()); //返回0和1之间的随机数
console.log(Math.sqrt(4)); // 开方
日期对象
对象中并没有任何属性可供使用,但可以通过大量的方法获取和设置时间
JavaScript中并没有日期数据类型
构造时间
西方人习惯将星期日作为一个星期的开始,0表示星期日,1表示星期一,依此类推
月份的表示为0-11,0代表一月份,则10月份为11,依此类推
无参数创建当前时间
let now = new Date(); // 无参数创建当前时间
传递年份和月份
new Date(2019, 10); // Fri Nov 01 2019 00:00:00 -> 2019.11.1 默认为1号
传递年月日
new Date(2019, 10, 2); // Sat Nov 02 2019 00:00:00 -> 2019.11.2
传递时分秒
new Date(2019, 10, 2, 10, 10, 10); // Sat Nov 02 2019 10:10:10 -> 2019.10.2 10:10:10
传递毫秒
不能单独传递年份,因为只传入一个参数会被认为是时间戳
时间戳是自1970年1月1日 零时零分零秒开始至现在的总毫秒数,全球统一
new Date(0) // Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
new Date(1546304949000); // Tue Jan 01 2019 09:09:09 GMT+0800 (中国标准时间)
中国标准时间即北京时间,所以以上转换都被加上了八个小时
获取时间
get 获取Date对象日期和时间的值
通过get可以获取年月日时分秒和星期
let now = new Date();
console.log(now.getDay()); // 0是代表星期日,1代表星期一 ...
console.log(now.getFullYear()); // 获取年份
console.log(now.getMonth()); // 获取月份,取值是0-11
console.log(now.getDate()); // 获取日期 返回值为5,今天是五号
console.log(now.getHours()); // 获取小时
console.log(now.getMinutes()); // 获取分钟
console.log(now.getSeconds()); // 获取秒数
console.log(now.getTime()); // 获取时间戳
设置时间
set可以分别设置年月日时分秒
无法通过set去设置星期,因为星期是自动设置的
now.setFullYear(2021); // 设置年份
now.setMonth(10); // 设置月份
now.setDate(1); // 设置日期 10月1号
now.setHours(1); // 设置小时
now.setMinutes(2); // 设置分钟
now.setSeconds(10); // 设置秒数
时间解析
to
to可以返回Date对象的字符串格式的值
获取本地格式的时间
now.toDateString() // Mon Nov 01 2021
console.log(now.toLocaleDateString()); // 2021/11/1
console.log(now.toLocaleTimeString()) // 上午1:02:10
console.log(now.toLocaleString()); // 2021/11/1 上午1:02:10
返回值皆为字符串
parse
Date.parse()
方法可以解析一个字符串格式的Date时间,返回时间戳
let str = '2019 01 01';
let str2 = '2019 01 01 09:09:09';
console.log(Date.parse(str)); // 1546272000000
console.log(new Date(Date.parse(str2)).getFullYear()); // 2019