强制类型转换
JavaScript 支持使用以下函数进行强制类型转换。
- Boolean(value):把参数值转换为布尔型值。
- Number(value):把参数值转换为数字。
- String(value):把参数值转换为字符串。
在下面代码中,分别调用上述 3 个函数,把参数值强制转换为新的类型值。
console.log(String(true)); //返回字符串"true" console.log(String(0)); //返回字符串"0" console.log(Number("1")); //返回数值1 console.log(Number(true)); //返回数值1 console.log(Number("a")); //返回NaN console.log(Boolean(1)); //返回true console.log(Boolean("")); //返回false
注意:
- true 被强制转换为数值 1,false 被强制转换为数值 0,而使用 parseInt() 方法转换时,都返回 NaN。
console.log(Number(true)); //返回1 console.log(Number(false)); //返回0 console.log(parseInt(true)); //返回NaN console.log(parseInt(false)); //返回NaN
- 当值包括至少一个字符的字符串、非 0 数字或对象时,Boolean() 强制转换后都会返回 true。
- 如果值是空字符串、数字 0、undefined 或 null,Boolean() 强制转换后都会返回true。
- Number() 强制转换与 parseInt() 和 parseFloat() 方法的处理方式不同,Number() 转换的是整体,而不是局部值。
console.log(Number("123abc")); //返回NaN console.log(Number("123abc")); //返回数值123
- String() 能够把 null 和 undefined 强制转换为对应字符串,而调用 toString() 方法将引发错误。
console.log(String(null)); console.log(String(undefined)); console.log(null.toString()); console.log(undefined.toString());
在 JavaScript 中,使用强制类型转换非常有用,但是应该根据具体应用场景使用,以确保正确转换值。
自动类型转换
JavaScript 能够根据具体运算环境自动转换参与运算的值得类型。下面简单介绍常用值在不同运算环境中被自动转换的值列表。
值(value) | 字符串操作环境 | 数字运算环境 | 逻辑运算环境 | 对象操作环境 |
---|---|---|---|---|
undefined | "undefined" | NaN | false | Error |
null | "null" | 0 | false | Error |
非空字符串 | 不转换 | 字符串对应的数字值NaN | true | String |
空字符串 | 不转换 | 0 | false | String |
0 | "0" | 不转换 | false | Number |
NaN | "NaN" | 不转换 | false | Number |
Infinity | "Infinity" | 不转换 | true | Number |
Number.POSITIVE_INFINITY | "Infinity" | 不转换 | true | Number |
Number.NEGATIVE_INFINITY | "-Infinity" | 不转换 | true | Number |
-Infinity | "-Infinity" | 不转换 | true | Number |
Number.MAX_VALUE | "1.7976931348623157e+308" | 不转换 | true | Number |
Number.MIN_VALUE | "5e-324" | 不转换 | true | Number |
其他所有数字 | "数字的字符串值" | 不转换 | true | Number |
true | "true" | 1 | 不转换 | Boolean |
false | "false" | 0 | 不转换 | Boolean |
对象 | toString() | valueOf() 或 toString() 或 NaN | true | 不转换 |
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/23048.html