JavaScript 数据类型转换详解:方法、性能与异常处理

作者:纸飞机时间:2026-10-25 19:03:05浏览:271

本文系统梳理了 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 处理上表中左栏的转换例句。

使用时可能需要根据具体情况修改符号等。

作者最新文章