JavaScript 数据类型详解:从基本类型到数值转换
本文系统梳理 JavaScript 的五种基本数据类型(Undefined、Null、Boolean、Number、String)与 Object 类型。重点解析各类型的特性、typeof 检测结果、Boolean 转换规则,以及 Number()、parseInt()、parseFloat() 等数值转换函数的具体行为与注意事项,帮助开发者准确掌握类型处理机制。
JavaScript 数据类型概述
ECMAscript 定义了五种简单数据类型,通常称为基本数据类型,分别是 Undefined、Null、Boolean、Number 和 String。此外,还存在一种复杂数据类型 Object。
Undefined 与 Null 类型
Undefined 类型
当使用 var 声明变量但未进行初始化时,该变量的默认值为 undefined。例如:
var number;
document.write(number); //undefined
如果变量未声明直接访问,则会引发错误。例如:
document.write(str); //错误
然而,使用 typeof 运算符检测时,无论变量是否已声明,结果均返回 undefined。例如:
var num;
document.write(typeof num); //undefined
document.write(typeof str); //undefined
Null 类型
使用 typeof 检测 null 时,返回的结果是 "object"。例如:
var num = null;
document.write(typeof num); //object
实际上,undefined 的值派生自 null,因此两者相等(null == undefined)会返回 true。例如:
alert(null == undefined); //true
需要注意的是,如果变量旨在保存对象但尚未真正赋值,应明确将其赋值为 null。这有助于区分 null 和 undefined。例如:
var num1 = null;
var num2;
document.write(typeof num1 + " " + typeof num2); //object undefined
Boolean 类型与转换规则
Boolean 类型
要将一个值转换为其对应的 Boolean 值,可以使用转型函数 Boolean()。例如:
var str = "helloworld";
document.write(Boolean(str)); //true
《JavaScript 高级编程设计》一书中的 3.4.4 章节提供了各种数据类型及其对应的转换规则表格,主要包括以下几种情况:
- 当数据类型为 String 时,任何非空字符串都会转换为 true;
- 当数据类型为 Number 时,除了 0 和 NaN 会被转换为 false 之外,其他数值都会转换为 true;
- 当数据类型为 Object 时,除了 null 之外,所有对象都会转换为 true;
- 当数据类型为 Undefined 时,n/a 会被转换为 true,而 undefined 会被转换为 false;
需要注意的是,if 语句经常使用自动执行的 Boolean 转换作为条件。例如:
var str = "helloworld";
if (str){
document.write("hellothere");
} //hellothere
Number 类型与数值范围
Number 类型
除了十进制表示外,整数还可以通过八进制或十六进制字面值来表示。其中,八进制字面值的第一位必须是 0,后跟八进制数字序列(0~7)。例如:
var num1 = 070; //八进制的56
var num2 = 032; //八进制的32
var num3 = 079; //错误的八进制(>7)
var num4 = 09; //错误的八进制(>7)
十六进制字面值的前两位必须是 0x,后跟任何十六进制数(0~9 及 A~F)。例如:
var num1 = 0xA; //十六进制的10
var num1 = 0xa; //也是十六进制的10(字母不区分大小写)
浮点数值
需要注意的是,永远不要比较特定的浮点数值。例如:
var a = 0.1;
var b = 0.2;
if (a + b == 0.3){
document.write("you are right")
} //因为0.1 加上0.2 实际上等于0.30000000000000004
数值范围
ECMAScript 能够表示的最大和最小数值保存在 Number.MAX_VALUE 和 Number.MIN_VALUE 之中。要确定一个数值是否是有穷的,可以使用 isFinite() 函数。例如:
document.write(isFinite(Number.MAX_VALUE + Number.MAX_VALUE)); //false
NaN
0 除以 0 会返回 NaN,正数除以 0 会返回 Infinity,负数除以 0 则会返回 -Infinity。此外,NaN 与任何数值都不相等,包括它本身。函数 isNaN() 可用于确定参数是否“不是数值”。例如:
document.write(isNaN("a")); //true;
document.write(isNaN("324")); //false;
document.write(isNaN(true)); //false;
document.write(isNaN(false)); //false;
document.write(isNaN(NaN)); //true;
数值转换函数详解
数值转换
有三个函数可以将非数值转换为数值:Number()、parseInt() 和 parseFloat()。
Number() 的转换规则如下:
如果是 Boolean 值,true 和 false 会被转换为 1 和 0。 如果是数字值,则保持不变。 如果是 null 值,则转换为 0。 如果是 undefined,返回 NaN。 如果是字符串,则遵循下列规则:
- 如果字符串仅包含数字,则将其转换为十进制数值。
- 如果是浮点格式,则将其转换成对应的浮点数值。同样也会忽略前导零。
- 如果是十六进制格式,则会转换成十进制数。
- 如果字符串是空的,则会转换成 0。
- 其他情况则会转换为 NaN。
具体看下面的例子:
document.write(Number(true)); //1
document.write(Number(false)); //0
document.write(Number("789")); //789
document.write(Number(null)); //0
document.write(Number(undefined)); //NaN
document.write(Number("02.0942")); //2.0942
document.write(Number(0xa)); //10
document.write(Number("")); //0
document.write(Number("fdsa")); //NaN
parseInt() 的转换规则如下:
- 如果第一个字符不是数字字符或者符号,parseInt() 会返回 NaN。
- 用 parseInt() 转换空字符串会返回 NaN。
- 如果第一个字符是数字字符,它会继续解析第二个字符,直到遇到了一个非数字字符。
下面是具体的例子:
document.write(parseInt("fds")); //NaN
document.write(parseInt("")); //NaN
document.write(parseInt("1111112abc")); //1111112
document.write(parseInt("-1111112abc")); //-1111112
document.write(parseInt("+1111112abc")); //-1111112
document.write(parseInt("0xa")); //10
document.write(parseInt("0022.00009")); //22
document.write(parseInt("070")); //ECMAScript 3认为是56(八进制), ECMAScript 5认为是70(十进制)
另外需要注意的是,ECMAScript 5 已经不具备解析八进制值的能力了,所以为了消除这个问题,可以为这个函数提供第二个参数:转换时使用的基数(多少进制),具体如下:
document.write(parseInt("070",10)); //70
document.write(parseInt("070",8)); //56
document.write(parseInt("070",16)); //112
多数情况下,最好默认设置成 10 进制。
parseFloat() 的转换规则如下:
- 与 parseInt() 类似,不同的是字符串第一个小数点是有效的,而从第二个小数点开始包括第二个小数点是无效的。
- 它不能解析十六进制数值!!!
- 它只能解析十进制数值!!!
- 它没有用第二个基数来指定进制的用法。
下面是具体的例子:
document.write(parseFloat("421")); //421
document.write(parseFloat("0421.32.1")); //421.32
document.write(parseFloat("0xaafd")); //0
document.write(parseFloat("070")); //70
document.write(parseFloat("070abc")); //70
document.write(parseFloat("")); //NaN
document.write(parseFloat("abc")); //NaN
String 类型与转换方法
String 类型
要把一个值转换成字符串有两种方式。第一种是使用几乎每个值都有的 toString() 方法。如下:
document.write((533).toString(10)); //"533"
document.write((0xa).toString(10)); //"10"
document.write((0xa).toString(2)); //"1010"
document.write((true).toString(10)); //"true"
document.write((false).toString(10)); //"false"
另外需要注意的是,null 和 undefined 不能转换。
document.write((null).toString(10)); //
document.write((undefined).toString(10)); //
如果不知道需要转换的数值是否是 null 或者 undefined,则应该使用转型函数 String()。如果是 null 会返回 "null",如果是 undefined 会返回 "undefined"。如下:
document.write(String(null)); //"null"
document.write(String(undefined)); //"undefined"
另外在下一篇文章中再详细介绍 Object 类型。
以上就是关于 JavaScript 数据类型的简单介绍,希望对大家学习 JavaScript 数据类型有所帮助。
JS脚本在App中运行报错怎么解决
2026-11-04 23:11:03
JS怎么使用padStart方法给数字补零
2026-11-04 11:12:03
JS是什么意思?JavaScript全称及基本定义
2026-11-04 08:05:29
JS 使用 toFixed(1) 保留一位小数的基本用法与注意事项
2026-11-03 18:34:57
JS字符串转整数:parseInt与Number的区别及用法
2026-11-03 17:26:54
相关标签:
