Skip to content
本页目录

数据类型

数据类型

js 的数据类型有两类:

  • 基本数据类型(7 种):
    • Number
    • String
    • Boolean
    • null
    • undefined
    • Symbol
    • BigInt
  • 引用数据类型:
    • Object

Object 包含: Object、Array、Function、Data、Regex

Math 是内置对象,它不是一个构造器,所有属性与方法都是静态的,不支持 BigInt

不同类型在内存中的存储

  • 直接声明方式创建的基本类型,存放在栈内存中;
  • 使用 new 创建基本类型(包装类型),是存在堆内存中,但存储的是指向栈内存的引用;
  • new 创建的基本类型与声明式的同值但不全等,因为 typeof 类型不同。
JS
const a = 'string';
const b = new String('string');
typeof a // 'string'
typeof b // 'object'
const a = 'string';
const b = new String('string');
typeof a // 'string'
typeof b // 'object'

以上说法存疑,目前红宝书等资料都说 js 分为栈内存与堆内存,但 ECMA 标准并没有定义内存的分类,由浏览器的编译器自己实现,目前 V8 引擎说法是基本类型也会存放在堆内存中。(待考证)

类型判断

1. typeof

  • 能区分基本数据类型
  • Object、Array、Null 都返回 object

特殊情况

JS
typeof null === 'object'
typeof function() {} === 'function'
typeof Date === 'function'
typeof null === 'object'
typeof function() {} === 'function'
typeof Date === 'function'

2. instanceof

  • 只能判断类实例对象,不支持基本数据类型
  • 能够区分 Object、Array、Function

e.g {} instanceof Object

3. Object.prototype.toString.call()

类型判断准确,但写法不容易记

JS
var toString = Object.prototype.toString;
console.log(toString.call(1));                      //[object Number]
console.log(toString.call(true));                   //[object Boolean]
console.log(toString.call('mc'));                   //[object String]
console.log(toString.call([]));                     //[object Array]
console.log(toString.call({}));                     //[object Object]
console.log(toString.call(function(){}));           //[object Function]
console.log(toString.call(undefined));              //[object Undefined]
console.log(toString.call(null));                   //[object Null]
var toString = Object.prototype.toString;
console.log(toString.call(1));                      //[object Number]
console.log(toString.call(true));                   //[object Boolean]
console.log(toString.call('mc'));                   //[object String]
console.log(toString.call([]));                     //[object Array]
console.log(toString.call({}));                     //[object Object]
console.log(toString.call(function(){}));           //[object Function]
console.log(toString.call(undefined));              //[object Undefined]
console.log(toString.call(null));                   //[object Null]

4. 其它

  • 判断数组 Array.isArray()