1. 原始类型(Primitive Types)
(1) **number** - 数字类型
范围:包含整数、浮点数、特殊值(Infinity, -Infinity, NaN)
示例:
javascript
42 // 整数
3.14 // 浮点数
NaN // 非数字(Not a Number)
1e5 // 科学计数法(100000)
(2) **string** - 字符串类型
特点:用单引号 ''、双引号 "" 或反引号 ` ` 包裹
示例:
javascript
'Hello'"JavaScript"`模板字符串:${1 + 2}` // 输出 "模板字符串:3"
(3) **boolean** - 布尔类型
取值:true 或 false
示例:
javascript
const isStudent = true;
const isAdmin = false;
(4) **null** - 空值
作用:表示“无”、“空”或“值未知”的明确赋值。
注意:typeof null 返回 "object"(历史遗留问题)。
示例:
javascript
let user = null; // 显式赋值为空
(5) **undefined** - 未定义
场景:变量声明但未赋值时默认值。
示例:
javascript
let age;console.log(age); // 输出 undefined
(6) **symbol** - 唯一标识符(ES6+)
特点:唯一且不可变,常用于对象属性的键。
示例:
javascript
const id = Symbol('id'); // 即使描述相同,Symbol 值也不同
(7) **bigint** - 大整数(ES11+)
作用:表示任意长度的整数,后缀加 n。
示例:
javascript
const bigNumber = 123456789012345678901234567890n;
2. 对象类型(Object Types)
(1) **object** - 普通对象
结构:键值对集合。
示例:
javascript
const person = { name: 'Alice', age: 30 };
(2) **array** - 数组
特点:有序数据集合,索引从 0 开始。
示例:
javascript
const colors = ['red', 'green', 'blue'];
(3) **function** - 函数
说明:可执行代码块,typeof function() {} 返回 "function"。
示例:
javascript
function add(a, b) { return a + b; }
(4) 其他内置对象
常见类型:
Date(日期)、RegExp(正则表达式)、Set(集合)、Map(映射)等。
数据类型检测方法
1. **typeof 运算符**
javascript
typeof 42 // "number"
typeof 'hello' // "string"
typeof true // "boolean"
typeof undefined // "undefined"
typeof Symbol() // "symbol"
typeof 10n // "bigint"
typeof {} // "object"
typeof [] // "object"(数组也是对象)
typeof function() {} // "function"
typeof null // "object"(历史遗留问题)
2. **instanceof 运算符**
作用:检测对象是否属于某个构造函数。
javascript
[] instanceof Array // tru
e{} instanceof Object // true
3. **Object.prototype.toString.call()**
精确检测类型:
javascript
Object.prototype.toString.call(42) // "[object Number]
"Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call([1, 2]) // "[object Array]"
关键区别
特征原始类型对象类型
存储方式值直接存储在栈内存引用地址存储在栈,值在堆内存
赋值行为复制值本身(值传递)复制引用地址(引用传递)
可变性不可变(修改会创建新值)可变(可修改属性)
比较方式比较值是否相等比较引用地址是否相同
代码示例
javascript
// 原始类型比较(值相等)const a = 10;
const b = 10;console.log(a === b);
// true// 对象类型比较(引用不同)const obj1 = { name: 'Alice' };
const obj2 = { name: 'Alice' };
console.log(obj1 === obj2); // false








网友评论