Skip to content

基本类型

类型检测

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

推荐做法

市面上已经存在很多针对数学计算的库 mathjsdecimal.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