JavaScript 数据类型转换详解:方法、性能与异常处理
本文系统梳理了 JavaScript 中常见的数据类型转换方法,包括字符串拼接、parseInt、parseFloat、eval 以及 String、Number、Boolean 构造函数。文章对比了不同转换方式在 IE 和 Firefox 浏览器下的执行效率,并提供了使用 eval 时的异常处理代码示例,帮助开发者选择合适且安全的转换策略。
JavaScript 数据类型转换概述
JavaScript 提供了多种数据类型转换的方法,具体如下。
一、转换成数字:xxx*1.0
通过字符串拼接实现转换:将目标值与空字符串相加,即 xxx+""。
二、从一个值中提取另一种类型的值,并完成转换工作。
提取字符串中的整数:使用 parseInt() 函数。
例如:parseInt("123zhang") 的返回结果为 123。
提取字符串中的浮点数:使用 parseFloat() 函数。
例如:parseFloat("0.55zhang") 的返回结果为 0.55。
执行以字符串形式表示的 JavaScript 代码:使用 eval() 函数。
例如:zhang=eval("1+1") 执行后,zhang 的值为 2。
转换为字符串:使用 toString() 方法。
例如:zhang=eval("1+1") 执行后,zhang 的值为 2(注:此处原文示例与描述略有脱节,通常 toString 用于数值转字符串,如 (1).toString() 为 "1")。
三、将整个值从一种类型转换为另一种数据类型(称作基本数据类型转换)。
基本数据类型转换方法
基本数据类型转换主要包含三种方法。
转换为字符型:使用 String() 构造函数。例如:String(678) 的结果为 "678"。
转换为数值型:使用 Number() 构造函数。例如:Number("678") 的结果为 678。
转换为布尔型:使用 Boolean() 构造函数。例如:Boolean("aaa") 的结果为 true。
在使用上述方法时,建议对参数和方法的执行结果进行判断及异常处理,以确保代码健壮性。
转换方法的性能对比
参考文档中关于执行效率的总结如下。
在 IE 浏览器下,第一种方式(字符串拼接)速度最快,第二种方式(Number/String转换)次之,第三种方式(eval等)最差,但差距仅在 10 万次调用级别,耗时差异仅为几十到几百毫秒。
在 Firefox 浏览器下,第一种和第二种方式速度基本相当,第三种方式最慢。
总体而言,速度差别极小,基本可以忽略不计。
但从代码简洁性来看,第一种方式(字符串拼接)写法简便且易读。
此外,它不会出现第二种方式中因对象缺少 toString 方法而报错的问题,且始终运行较快。
因此,个人习惯使用第一种方式(字符串拼接)来完成数据类型转换。
然而,若需要从类似“123456abcd”的字符串中提取数字,则应使用 parseInt 或 parseFloat 等专用函数。
需要注意的是,转换结果有时可能是 NaN,因此需要进行判断处理。
eval 函数的异常处理示例
以下是异常处理的示例代码。
代码如下:
// 执行文本框内的语句,用 eval 返回语句执行后的值
function doFunction(str) {
var result = str.replace(new RegExp("\"", "gm"), "");
// 判断语句是否合法
var reg = /\s*[A-Za-z]+\s*\('.+'\)\s*$/;
if (result.match(reg)) // 或者用 reg.test(result); 方法判断
try {
result = eval(result);
return result;
}
} catch (Error) {
alert("抱歉!语句无法执行转化。注意语法和拼写。");
return;
}
} else alert("请检查数据类型转换语句的格式及语法!");
} 其他测试示例与注意事项
有关数据转换方法的其他测试示例如下表所示。
| 例 句 | 结 果 |
|---|---|
| parseInt('1234') | 1234 |
| parseInt('1234.00') | 1234 |
| parseInt('1234abc') | 1234 |
| parseInt('abc1234') | undefined(转换失败) |
| parseFloat('1234.123') | 1234.123 |
| parseFloat('1234.123a') | 1234.123 |
| parseFloat('a1234.123') | NaN |
| Number('1234.123') | 1234.123 |
| Number('1234.123aa') | NaN |
| String(eval('12+10')) | 22 |
| Boolean('0'),Boolean('567'),Boolean(567) | true |
| Boolean(null),Boolean(false),Boolean(0),Boolean(''),Boolean() | false |
| this.toString() | [object] |
| (typeof(this)).toString() | object |
| eval('12+34') | 46 |
| eval('12+34')+'' | 46 |
| eval('12+34')*1.0 | 46 |
| typeof(eval('12+34')*1.0) | number |
| typeof(eval('12+34')+'') | string |
注:测试环境为 vs2008、ie8 等,在页面上输入的语句由 js 中的 eval 处理上表中左栏的转换例句。
使用时可能需要根据具体情况修改符号等。
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
