Skip to content

JavaScript中的数据类型和区别

在JavaScript中,数据类型分别两种

  • 基本类型
  • 复杂类型

基本类型

基本类型主要为

  • Number
  • String
  • Boolean
  • Undefined
  • Null
  • Symbol

Number - 数值

数值最常见的整数类型格式则为十进制,还可以设置八进制(零开头)、十六进制(0x开头)

javascript
letintNum = 55 // 10进制的55
letnum1 = 070 // 8进制的56
lethexNum1 = 0xA // 16进制的10

浮点类型则在数值汇总必须包含小数点,还可通过科学计数法表示

javascript
letfloatNum1 = 1.1;
letfloatNum2 = 0.1;
letfloatNum3 = .1; // 有效,但不推荐
letfloatNum = 3.125e7; // 等于31250000

在数值类型中,存在一个特殊数值NaN,意为“不是数值”,用于表示本来要返回数值的操作失败了(而不是抛出错误)

javascript
console.log(0 / 0); // NaN
console.log(-0 / +0); // NaN

String - 字符串

字符串可以使用双引号(")、单引号(')或反引号(`)标示

javascript
letfirstName = "John";
letlastName = 'Jacob';
letlastName = `Jingleheimerschmidt`

字符串是不可变的,意思是一旦创建,它们的值就不能变了

javascript
letlang = "Java";
lang = lang + "Script"; // 先销毁再创建

Boolean - 布尔值

Boolean(布尔值)类型有两个字面值:truefalse

通过Boolean可以将其他类型的数据转化成布尔值

规则如下:

数据类型转换为true的值转换为false的值
String非空字符串""
Number非零数值(包括无穷值)0NaN
Object任意对象null
UndefinedN/A(不存在)undefined

Undefined - 未定义

Undefined类型只有一个值,就是特殊值undefined。当使用varlet声明了变量但没有初始化时,就相当于给变量赋予了undefined

javascript
letmessage;
console.log(message == undefined); // true

包含undefined值的变量跟未定义变量是有区别的

javascript
letmessage; // 这个变量被声明了,只是值为undefined

console.log(message); // "undefined"
console.log(age); // 没有声明过这个变量,报错

Null - 空值

Null类型同样只有一个值,即特殊值null

逻辑上讲,null值表示一个空对象指针,这也是给typeof传一个null会返回object的原因

javascript
letcar = null;
console.log(typeofcar); // "object"

undefined值是由null值派生而来

javascript
console.log(null == undefined); // true

只要变量要保存对象,而当时又没有那个对象可保存,就可用null来填充该变量

Symbol - 符号

Symbol(符号)是原始值,且符号实例是唯一、不可变的。符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险

javascript
letgenericSymbol = Symbol();
letotherGenericSymbol = Symbol();
console.log(genericSymbol == otherGenericSymbol); // false

letfooSymbol = Symbol('foo');
letotherFooSymbol = Symbol('foo');
console.log(fooSymbol == otherFooSymbol); // false

复杂类型

复杂类型统称为Object

  • Object
  • Array
  • Function
  • Date
  • Map
  • Set

Object - 对象

创建object常用方式为对象字面量表示法,属性名可以是字符串或数值

javascript
let person = {
    name: "Nicholas",
    "age": 29,
    5: true
};

Array - 数组

JavaScript数组是一组有序的数据,但跟其他语言不同的是,数组中每个槽位可以存储任意类型的数据。并且,数组也是动态大小的,会随着数据添加而自动增长

javascript
let colors = ["red", 2, {age: 20}]
colors.push(2)

Function - 函数

函数实际上是对象,每个函数都是 Function类型的实例,而 Function也有属性和方法,跟其他引用类型一样

函数存在三种常见的表达方式:

  • 函数声明
javascript
// 函数声明
function sum(num1, num2) {
    return num1 + num2;
}
  • 函数表达式
javascript
let sum = function (num1, num2) {
    return num1 + num2;
};
  • 箭头函数 函数声明和函数表达式两种方式
javascript
let sum = (num1, num2) => {
    return num1 + num2;
};

Date - 日期

Date 类型用于表示日期和时间,JavaScript 中的日期基于 Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 起经过的毫秒数)。

创建日期对象的常用方式:

javascript
// 创建当前日期和时间的对象
let now = new Date();

// 传入毫秒数创建指定日期
let epoch = new Date(0); // 1970-01-01T00:00:00.000Z

// 传入日期字符串(多种格式支持)
let date1 = new Date("2023-10-01");
let date2 = new Date("October 1, 2023");

// 传入年、月(0-11)、日等参数
let date3 = new Date(2023, 9, 1, 12, 30, 0); // 2023年10月1日12:30:00

常用方法:

javascript
let date = new Date();
console.log(date.getFullYear()); // 获取年份(4位数)
console.log(date.getMonth()); // 获取月份(0-11)
console.log(date.getDate()); // 获取日期(1-31)
console.log(date.getHours()); // 获取小时(0-23)
console.log(date.getTime()); // 获取时间戳(毫秒数)
console.log(date.toLocaleDateString()); // 本地格式的日期字符串

Map - 映射

Map 是一种键值对集合,与对象不同的是:

  • 键可以是任意类型(包括对象、函数、基本类型等)
  • 能够记住键的插入顺序
  • 有专门的方法获取键值对数量

创建和使用 Map

javascript
// 创建空映射
let map = new Map();

// 初始化时传入可迭代的键值对数组
let map2 = new Map([
    ["name", "Alice"],
    [1, "number key"],
    [true, "boolean key"]
]);

// 添加/修改键值对
map.set("age", 30);
map.set({id: 1}, "object key");

// 获取值
console.log(map.get("age")); // 30

// 检查键是否存在
console.log(map.has("age")); // true

// 删除键值对
map.delete("age");

// 获取映射大小
console.log(map.size); // 1(剩余{id:1}对应的键值对)

// 清空映射
map.clear();

遍历 Map

javascript
let map = new Map([["a", 1], ["b", 2]]);

// 遍历键值对
for (let [key, value] of map) {
    console.log(`${key}: ${value}`);
}

// 只遍历键
for (let key of map.keys()) {
    console.log(key);
}

// 只遍历值
for (let value of map.values()) {
    console.log(value);
}

Set - 集合

Set 是一种无序的、不重复的元素集合,常用于存储唯一值。

创建和使用 Set

javascript
// 创建空集合
let set = new Set();

// 初始化时传入可迭代对象(数组、字符串等)
let set2 = new Set([1, 2, 3, 3, 4]); // 自动去重,结果为 {1, 2, 3, 4}
let set3 = new Set("hello"); // 结果为 {'h', 'e', 'l', 'o'}

// 添加元素
set.add(5);
set.add("string");
set.add({}); // 可以添加对象(引用不同则视为不同元素)

// 检查元素是否存在
console.log(set.has(5)); // true

// 删除元素
set.delete(5);

// 获取集合大小
console.log(set.size); // 2(剩余"string"和{})

// 清空集合
set.clear();

遍历 Set

javascript
let set = new Set([1, 2, 3]);

// 遍历元素
for (let item of set) {
    console.log(item);
}

// 转为数组(利用扩展运算符)
let arr = [...set]; // [1, 2, 3]

// 利用Set实现数组去重
let uniqueArr = [...new Set([1, 2, 2, 3])]; // [1, 2, 3]

尘埃虽微,积之成集;问题虽小,记之为鉴。 雾中低语,心之所向;思绪飘渺,皆可成章。