Skip to content

JavaScript中的基本数据类型

JavaScript 中的数据类型可以分为两大类:基本数据类型(原始数据类型)和引用数据类型(对象类型)。本文将重点介绍基本数据类型。

一、基本数据类型概述

最新的 ECMAScript 标准定义了 7 种基本数据类型:

数据类型描述示例
Number数字类型,包括整数和浮点数let age = 25; let price = 99.99;
String字符串类型,表示文本数据let name = "张三";
Boolean布尔类型,只有两个值:true 或 falselet isActive = true;
Undefined未定义类型,表示变量声明但未赋值let value; // value 为 undefined
Null空值类型,表示空值或未知值let empty = null;
Symbol符号类型 (ES6),表示唯一标识符let sym = Symbol('id');
BigInt大整数类型 (ES2020),表示任意大的整数let bigNum = 12345678901234567890n;

二、各数据类型详解

1. Number(数字类型)

  • 用于表示整数和浮点数(小数)1,5
  • JavaScript 不区分整型和浮点型,所有数字都是 64 位浮点数7
  • 特殊值:NaN(非数字)、Infinity(无穷大)7
javascript

let integer = 42; // 整数
let float = 3.14; // 浮点数
let negative = -10; // 负数
let scientific = 1.5e3; // 科学计数法,表示 1500

2. String(字符串类型)

  • 用于表示文本数据,可以使用单引号、双引号或反引号包裹5,8
  • 字符串是不可变的,一旦创建就不能修改7
  • 模板字符串(反引号)支持多行文本和字符串插值5
javascript
let singleQuote = 'Hello';
let doubleQuote = "World";
let backtick = Hello, ${doubleQuote}!; // 模板字符串,输出 "Hello, World!"
// 字符串操作
let str = "JavaScript";
console.log(str.length); // 获取长度:10
console.log(str[0]); // 访问字符:"J"
console.log(str.toUpperCase()); // 转换为大写:"JAVASCRIPT"

3. Boolean(布尔类型)

  • 只有两个值:true(真)和 false(假)1,2
  • 常用于条件判断和逻辑运算8
  • 在布尔上下文中,以下值会被视为 false(假值):
    • false
    • 00.0
    • ""(空字符串)
    • null
    • undefined
    • NaN
    javascript
    let isTrue = true;
     let isFalse = false;
     let isGreater = 5 > 3; // true
     // 布尔转换
     console.log(Boolean(0)); // false
     console.log(Boolean("Hello")); // true
     console.log(Boolean("")); // false

4. Undefined(未定义类型)

  • 表示变量已声明但未赋值2,5
  • 函数没有返回值时,默认返回 undefined4
javascript
let undefinedVar;
console.log(undefinedVar); // undefined
function test() {
    // 没有返回值
}

console.log(test()); // undefined

5. Null(空值类型)

  • 表示空值或不存在的对象引用2,7
  • 使用 typeof 检测 null 会返回 "object",这是 JavaScript 的历史遗留问题2,4
javascript
  let emptyValue = null;
console.log(emptyValue); // null
console.log(typeof null); // "object"(历史遗留问题)
// 通常用于初始化变量,表示暂无有效值
let data = null;

6. Symbol(符号类型)

  • ES6 新增的数据类型,表示唯一且不可变的值4,5
  • 常用于对象属性的键,避免属性名冲突7,8
javascript
  let sym1 = Symbol('id');
let sym2 = Symbol('id');
console.log(sym1 === sym2); // false,即使描述相同也是不同的 Symbol
// 作为对象属性键
let user = {
    name: "张三",
    [sym1]: 12345 // 唯一属性
};

7. BigInt(大整数类型)

  • ES2020 新增,用于表示大于 2^53 - 1 的整数4,7
  • 在整数字面量后加 n 或调用 BigInt() 函数创建4
javascript
  let bigInt = 1234567890123456789012345678901234567890n;
let alsoBigInt = BigInt("9007199254740991");
console.log(bigInt + 1n); // 大整数运算
// 不能与普通 Number 混合运算
let regularNumber = 100;
// console.log(bigInt + regularNumber); // 报错
console.log(bigInt + BigInt(regularNumber)); // 正确用法

三、数据类型检测

1. typeof 运算符

  • 返回一个字符串,表示未经计算的操作数的类型2,4
javascript
  console.log(typeof 42); // "number"
console.log(typeof "Hello"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof Symbol("id")); // "symbol"
console.log(typeof 123n); // "bigint"
console.log(typeof null); // "object"(历史遗留问题)
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function () {
}); // "function"

2. 其他检测方法

javascript
// 检测数组
console.log(Array.isArray([])); // true
console.log([] instanceof Array); // true
// 检测 null
let value = null;
console.log(value === null); // true
// 通用类型检测(推荐)
function getType(value) {
    return Object.prototype.toString.call(value).slice(8, -1);
}

console.log(getType(42)); // "Number"
console.log(getType("Hello")); // "String"
console.log(getType(true)); // "Boolean"
console.log(getType(null)); // "Null"
console.log(getType(undefined)); // "Undefined"
console.log(getType(Symbol("id"))); // "Symbol"
console.log(getType(123n)); // "BigInt"
console.log(getType([])); // "Array"
console.log(getType({})); // "Object"

四、基本数据类型的特点

  1. 不可变性:基本数据类型的值一旦创建就不能修改7
  2. 值传递:赋值或传递参数时,传递的是值的副本7
  3. 栈内存存储:基本数据类型存储在栈内存中,访问速度快4,7
javascript
   // 值传递示例
let a = 10;
let b = a; // b 是 a 的副本
a = 20;
console.log(a); // 20
console.log(b); // 10(b 的值不受 a 影响)
// 与引用类型的对比
let obj1 = {value: 10};
let obj2 = obj1; // obj2 和 obj1 引用同一个对象
obj1.value = 20;
console.log(obj2.value); // 20(obj2 的值随 obj1 变化)

五、类型转换

1. 显式类型转换

javascript
// 转换为数字
console.log(Number("123")); // 123
console.log(parseInt("123")); // 123
console.log(parseFloat("3.14")); // 3.14
// 转换为字符串
console.log(String(123)); // "123"
console.log((123).toString()); // "123"
// 转换为布尔值
console.log(Boolean(0)); // false
console.log(Boolean(1)); // true
console.log(Boolean("")); // false
console.log(Boolean("Hello")); // true

2. 隐式类型转换

javascript
// 字符串拼接
console.log("5" + 1); // "51"(数字被转换为字符串)
console.log("5" - 1); // 4(字符串被转换为数字)
// 布尔上下文
if (0) {
    console.log("这行不会执行"); // 0 被转换为 false
}
if ("Hello") {
    console.log("这行会执行"); // 非空字符串被转换为 true
}

六、总结

JavaScript 的基本数据类型是构建复杂程序的基石。理解每种类型的特点、使用场景以及类型转换规则,对于编写健壮、高效的 JavaScript 代码至关重要。在实际开发中,建议使用严格相等运算符(===)进行类型和值的比较,避免隐式类型转换带来的意外结果8

掌握这些基本数据类型后,你将能够更好地理解 JavaScript 的运行机制,为学习更复杂的引用数据类型(如 Object、Array、Function 等)打下坚实基础。 注:本文基于 ECMAScript 最新标准,内容适用于现代 JavaScript 开发环境。在实际编程中,请确保你的运行环境支持 ES6 及更高版本特性。