【JavaScript】数据类型

97 阅读2分钟

数据类型的种类

  • 基本类型:StringNumberBooleanundefinednullSymbolbigInt
  • 引用类型:object

一、基本类型

1.1 null和undefined

  • null和undefined的区别:
    • undefined:值是undefined和未声明的变量。运算符typeof运算结果都是undefined
    • null: 值是null。运算符typeof运算结果都是object
  • null == undefined; // true
    • JavaScript规范:要比较相等性之前,不能将 null 和 undefined 转换成其他任何值,并且规定null 和 undefined 是相等的。
  • null === undefined; // false
    • ===,全等,包括类型、值等各方面进行比较,null和undefined是属于两种类型;
  • 获取 null 的类型:
    • typeof null; // Object -> 不对

      为什么:是一个BUG。在JavaScript最初版本中,使用的 32 位系统,js 为了性能优化,使用低位来存储变量的类型信息。

      原因:在判断数据类型时,是根据机器码低位表示来判断的。正好,null的是全0,与Object的机器码低位标识 000 一致,所以就被判断为 object

      数据类型与机器码标识:Object -> 000; 整数 -> 1; 浮点数 -> 010; 字符串 -> 100; 布尔 -> 110; undefined -> -2^31(即全为1); null -> 全为0;

      至于后续版本包括ES6都不修复这个bug的原因:(信息来源途径:web.archive.org)

      1. ES6 提案了,但是被拒绝了。因为遗留代码太多,会破坏现有的规范
    • 精准获取null类型的方式:Object.prototype.toString.call(null) ; // [object Null]

      • 原理

        image.png

        通过上图我们可知:1) Object对象和它的原型链上各自都有一个 toString() 方法;2) Object对象 输出的是其函数体;Object 原型链上输出的是值类型。
        toString(): 这个方法是将传入的数据类型转换成字符串输出。

        image.png 通过上图可知,null和undefined都是没有toString() 方法。而且,大多数对象,tostring() 方法都是重写的,这时,需要用 call()Reflect.apply() 等方法来调用

1.2 NAN

  • 数值类型(Number),代表值不确定

1.3 String

字符串对象,用于表示和操作字符系列

  • 和任何类型的值相加都变成字符串。例如:123 + 'qqq' == '123qqq';

二、引用类型

Object对象:由属性构成的无序集合

Object对象有哪些:

  • Function(函数)
  • Array(数组)
  • Date(日期)
  • RegExp(正则表达式)

参考: MDN-重新介绍 JavaScript(JS 教程)