本文详细解析JavaScript中String()全局函数与对象toString()方法的差异。重点说明toString()无法处理null和undefined,但支持指定进制转换;而String()可安全转换所有类型包括null/undefined,但不支持进制参数。通过代码示例对比两者在布尔值、空值处理及进制输出上的不同表现,帮助开发者根据需求选择合适的转换方式。
String()与toString()的基本差异
在JavaScript中,String()函数与toString()方法均可用于将数据转换为字符串类型,但两者在行为机制上存在显著差异。
首先,toString()方法适用于绝大多数数据类型,但其无法处理null和undefined值,尝试调用会引发错误。
以布尔值false为例进行转换测试。
<script>
var str = false.toString();
console.log(str, typeof str);
</script>
执行后返回字符串'false',类型标识为string。
toString()对null和undefined的处理限制
接下来验证null和undefined是否可通过toString()转换。
<blockquote style="margin-right: 0px;" dir="ltr"><pre class="html" name="code"><script>
var str = null.toString();
console.log(str, typeof str);
</script>
对null调用toString()时,程序抛出错误。
<script>
var str = undefined.toString();
console.log(str, typeof str);
</script>
同样,对undefined调用toString()也会触发错误。
toString()的进制转换功能
值得注意的是,toString()方法接受一个可选参数,用于指定输出的进制格式。
调用.toString(2)可将数值转换为二进制字符串。
调用.toString(8)可将数值转换为八进制字符串。
调用.toString(10)可将数值转换为十进制字符串。
调用.toString(16)可将数值转换为十六进制字符串。
String()对null和undefined的安全转换
其次,String()全局函数具有更强的兼容性,能够将null和undefined安全转换为字符串,但它不支持进制转换参数。
以null为例进行String()转换测试。
<script>
var str = String(null);
console.log(str, typeof str);
</script>
执行后返回字符串'null',类型标识为string。
接着测试undefined的转换情况。
<script>
var str = String(undefined);
console.log(str, typeof str);
</script>
执行后返回字符串'undefined',类型标识为string。
综上所述,String()与toString()在异常处理和进制支持上各有侧重,开发者应根据具体场景选择合适的方法。