JavaScript 数据类型、数值精度与字符串详解

听雨眠
听雨眠
发布时间:2026-10-13 | 3人浏览过
原创

JavaScript 的数据分为原始类型和对象类型两大阵营。理解其核心差异是掌握语言的基础。本文将深入剖析数字类型的边界情况(如无穷大与 NaN)、由二进制浮点数引发的精度陷阱,以及基于 Unicode 的字符串操作细节,帮助开发者规避常见逻辑错误。

结果或目标

掌握 JavaScript 中五种原始数据类型的行为特征,特别是数值计算的异常处理和字符串的内部存储机制。

准备条件

  • 具备基础的 JavaScript 语法知识。
  • 了解计算机中整数与浮点数的基本表示概念。

真实操作顺序

第1步:理解原始类型与对象的区别

JavaScript 的数据结构分为两类:

  • 原始类型(Primitive Types):共 5 种,分别是 Number(数字)、String(字符串)、Boolean(布尔值)、null(空)和 undefined(未定义)。这些值是不可变的,直接存储在栈内存中。
  • 对象类型(Object Types):包括普通对象、数组、函数等。对象是属性的集合,属性由“名/值对”构成,值可以是原始值也可以是另一个对象。对象引用存储在堆内存中,通过指针访问。

此外,ECMAScript 还定义了三个特殊类:Date(日期)、RegExp(正则表达式)和 Error(错误),它们扩展了对象的功能。

第2步:掌握数字类型的运算与边界情况

JavaScript 不区分整数和浮点数,统一使用 Number 类型。它支持十进制、十六进制(前缀 0x)及八进制(前缀 0,但在 ES6 严格模式下被禁止)表示法。

1. 溢出与下溢的处理

当算术运算超出 Infinity 上限时,结果为 Infinity 或 -Infinity;当无限接近零但小于最小值时,发生下溢,结果为 0 或 -0。

var zero = 0;
var negz = -0;
console.log(zero === negz); // true
console.log(1/zero === 1/negz); // false (正无穷 !== 负无穷)

2. NaN 的特性与检测

NaN (Not a Number) 是 Number 对象的特殊属性,出现在 0/0、∞/∞、对负数开方或非数字运算时。其核心特性是 不等于任何值,包括自身。

判断是否为 NaN 的方法:

  • 使用全局函数:isNaN(x)。
  • 利用自反性:x != x (仅当 x 为 NaN 时为 true)。
  • 使用 isFinite(x) 排除 NaN、Infinity 和 -Infinity。

3. 二进制浮点数误差

JavaScript 采用 IEEE-754 双精度格式。虽然能精确表示 1/2、1/8 等分母为 2 的幂的分数,但无法精确表示 0.1 这类十进制分数。

var x = 0.3 - 0.2; // 0.09999999999999998
var y = 0.2 - 0.1; // 0.1
console.log(x == y); // false
console.log(y == 0.1); // true

在实际开发中,涉及金额或高精度计算时,应避免直接使用浮点数比较或运算,需引入专门的库或使用整数模拟。

第3步:深入字符串与 Unicode 编码

字符串是由 16 位值组成的不可变有序序列,通常来自 Unicode 字符集。JavaScript 没有单独的“字符型”,单个字符也是字符串。

1. Unicode 与 UTF-16

JS 字符串底层采用 UTF-16 编码。对于超出 16 位范围的字素(如 Emoji 或部分生僻字),会使用两个 16 位值(代理项对)表示。因此,length 属性返回的是 16 位代码单元的数量,而非视觉上的字符数量。字符串方法仅操作 16 位值,不会自动合并代理项对。

2. 字符串的不可变性与访问

字符串一旦创建便不可修改。所有修改字符串的方法(如 replace()、toUpperCase())都返回新字符串。字符串可视为只读数组,支持 s[0] 方括号访问索引位置的 16 位值。

3. 转义字符表

在字符串中使用反斜线 \ 表示特殊含义。常见转义符如下:

  • \n: 换行
  • \t: 水平制表
  • \": 双引号
  • \\: 反斜线本身
  • \uXXXX: 4 位十六进制 Unicode 字符
  • \xXX: Latin-1 字符

注意:若反斜线后跟未定义的字符(如 \#),则忽略反斜线,等效于原字符。在多行字符串书写中,行尾的反斜线用于连接下一行,但不包含在最终字符串内容中。

第4步:布尔值的转换规则

几乎所有 JavaScript 值都可转换为布尔值。以下 6 个值转换为 false(假值):

  • null
  • undefined
  • 0 和 -0
  • NaN
  • "" (空字符串)

其余所有值(包括空数组 [] 和空对象 {})均转换为 true(真值)。布尔对象提供 toString() 方法将布尔值转为 "true" 或 "false" 字符串。

简要总结

JavaScript 的类型系统简洁但隐含陷阱。处理数字时需警惕浮点精度丢失和 NaN 的特殊相等性;处理文本时需理解 UTF-16 的底层结构以避免长度计算偏差。遵循这些规范能有效提升代码的健壮性。以上就是 JavaScript 的数据类型、值和变量小结的详细内容,更多关于 JavaScript 基础的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表