数据类型
约 811 字大约 3 分钟
2025-02-03
问题
JavaScript 中有哪些数据类型?
如何判断这些数据类型?
在 JavaScript 中,数据类型分为 基本数据类型 和 引用数据类型,下面将详细介绍这些数据类型以及判断它们的方法。
基本数据类型
基本数据类型是存储简单值的类型,它们是按值存储和复制的。JavaScript 中有 7 种基本数据类型:
undefined
:当一个变量被声明但未赋值,或者函数没有返回值时,其值为undefined
。null
:表示一个空对象指针,通常用于手动将变量置为空。boolean
:只有两个值,true
和false
,用于逻辑判断。number
:表示整数和浮点数,包括特殊值NaN
(非数字)、Infinity
(正无穷)和-Infinity
(负无穷)。string
:表示文本数据,由零个或多个 16 位 Unicode 字符组成。symbol
:ES6 引入的新数据类型,表示独一无二的值,主要用于创建对象的私有属性和方法。bigint
:ES2020 引入,用于表示任意大的整数,通过在整数后面加n
来创建。
引用数据类型
引用数据类型是存储对象的类型,它们存储的是对象的引用(内存地址),而不是对象本身。常见的引用数据类型有:
object
:最基本的引用数据类型,可以包含各种键值对,如普通对象、数组、函数等。array
:一种特殊的对象,用于存储有序的数据集合。function
:也是一种对象,用于封装可重复使用的代码块。
判断数据类型的方法
1. typeof
运算符
typeof
运算符返回一个表示数据类型的字符串,适用于判断基本数据类型,但对 null
和 引用数据类型 的判断存在局限性。
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"(这是 JavaScript 的一个历史遗留问题)
console.log(typeof true); // "boolean"
console.log(typeof 123); // "number"
console.log(typeof "hello"); // "string"
console.log(typeof Symbol()); // "symbol"
console.log(typeof 123n); // "bigint"
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function() {}); // "function"
2. instanceof
运算符
instanceof
运算符用于判断一个对象是否是某个构造函数的实例,主要用于判断引用数据类型。
const arr = [1, 2, 3];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true
function Person() {}
const person = new Person();
console.log(person instanceof Person); // true
3. Object.prototype.toString.call()
方法
这是一种比较通用的判断数据类型的方法,可以准确判断所有数据类型,会将数据类型的检测结果以 [object <type>]
的形式返回。
console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]"
console.log(Object.prototype.toString.call(null)); // "[object Null]"
console.log(Object.prototype.toString.call(true)); // "[object Boolean]"
console.log(Object.prototype.toString.call(123)); // "[object Number]"
console.log(Object.prototype.toString.call("hello")); // "[object String]"
console.log(Object.prototype.toString.call(Symbol())); // "[object Symbol]"
console.log(Object.prototype.toString.call(123n)); // "[object BigInt]"
console.log(Object.prototype.toString.call({})); // "[object Object]"
console.log(Object.prototype.toString.call([])); // "[object Array]"
console.log(Object.prototype.toString.call(function() {})); // "[object Function]"
4. Array.isArray()
方法
专门用于判断一个值是否为数组。
const arr = [1, 2, 3];
const obj = {};
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false
5. Number.isNaN()
方法
用于判断一个值是否为 NaN
,与全局的 isNaN()
方法不同,Number.isNaN()
只对 NaN
返回 true
。
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("abc")); // false
console.log(isNaN("abc")); // true