基本类型
类型检测
typeof
typeof
用于返回以下原始类型
- 基本类型:number/string/boolean
- function
- object
- undefined
instanceof
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。
也可以理解为是否为某个对象的实例,typeof
不能区分数组,但instanceof
则可以。
值类型与对象
下面是使用字面量与对象方法创建字符串,返回的是不同类型。
javascript
let str = "test string";
let obj = new String("test string");
console.log(typeof str, typeof obj); //string object
只有对象才有方法使用,但在JS
中也可以使用值类型调用方法,因为它会在执行时将值类型转为对象,也就是所谓的对基本类型进行包装。
Number
NaN
表示无效的数值,计算将产生 NaN 结果。
NaN 不能使用 ==
比较,使用以下代码来判断结果是否正确.
Object.is
方法判断两个值是否完全相同
javascript
var res = 2 / 'string';
console.log(Object.is(res, NaN));
浮点精度
大部分编程语言在浮点数计算时都会有精度误差问题,下面来看 JS 中的表现形式
javascript
let v = 0.1 + 0.2
console.log(v)// 结果:0.30000000000000004
这是因为计算机以二进制处理数值类型,上面的 0.1 与 0.2 转为二进制后是无穷的
javascript
console.log((0.1).toString(2)) //0.0001100110011001100110011001100110011001100110011001101
console.log((0.2).toString(2)) //0.001100110011001100110011001100110011001100110011001101
处理方式
一种方式使用 toFixed 方法进行小数截取
javascript
console.log((0.1 + 0.2).toFixed(2)) //0.3
console.log(1.0 - 0.9) //0.09999999999999998
console.log((1.0 - 0.9).toFixed(2)) //0.10
推荐做法
市面上已经存在很多针对数学计算的库 mathjs 、decimal.js 等,我们就不需要自己构建了。下面来演示使用 decimal.js 进行浮点计算。
javascript
<script src="https://cdn.bootcss.com/decimal.js/10.2.0/decimal.min.js"></script>
<script>
console.log(Decimal.add(0.1, 0.2).valueOf())
</script>
Date
计算脚本执行时间
javascript
const start = Date.now();
for (let i = 0; i < 2000000; i++) {}
const end = Date.now();
console.log(end - start);
控制台测试
javascript
console.time("testFor");
for (let i = 0; i < 20000000; i++) {}
console.timeEnd("testFor");
moment.js
Moment.js 是一个轻量级的 JavaScript 时间库,它方便了日常开发中对时间的操作,提高了开发效率。
更多使用方法请访问中文官网 http://momentjs.cn 或 英文官网 https://momentjs.com