JavaScript深入之类型转换
JavaScript 是弱类型的语言,它的取值非常灵活。你期望一种类型值的时候,你可以提供任何类型的值,JavaScript 将根据需要自行转换类型,在 JavaScript 中通常将它们统称为 强制类型转换。
ECMAScript 规范中Type Conversion 章节中定义了转换规则。这里我们着重介绍 **ToPrimitive、ToBoolean**、 ToNumber 和 ToString 。
ToPrimitive
在 JavaScript 中,想要将对象转换成原始值,必然会调用 toPrimitive()内部函数,那么它是如何工作的呢?
1 | ToPrimitive(input [, PreferredType]) |
输入类型 | 结果 |
---|---|
Undefined | 返回 input 自身 |
Null | 返回 input 自身 |
Boolean | 返回 input 自身 |
Number | 返回 input 自身 |
String | 返回 input 自身 |
Symbol | 返回 input 自身 |
Object | 返回该对象的默认值。具体过程请(通过内部操作 DefaultValue ,参见 ES5 规范 8.12.8 节) |
如果 PreferredType 是 Number,执行顺序如下:
- 如果 input 为 primitive,返回。
- 否则,input 为 Object。调用 obj.valueOf()。如果结果是 primitive,返回。
- 否则,调用 obj.toString(). 如果结果是 primitive,返回。
- 如果 valueOf() 和 toString() 均不返回基本类型值,会产生 TypeError 错误。
- 如果 PreferredType 是 String,步骤 2 跟 3 互换,如果 PreferredType 为空,Date 类型默认为 String,其他都是 Number。
ToBoolean
ToBoolean 运算符根据下表将其参数转换为布尔值类型的值:
输入类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 结果等于输入的参数(不转换)。 |
Number | 如果参数是 +0, -0, 或 NaN,结果为 false ;否则结果为 true。 |
String | 如果参数参数是空字符串(其长度为零),结果为 false,否则结果为 true。 |
Object | true |
Symbol | true |
ToNumber
ToNumber 运算符根据下表将其参数转换为数值类型的值:
输入类型 | 结果 |
---|---|
Undefined | NaN |
Null | +0 |
Boolean | 如果参数是 true,结果为 1。如果参数是 false,此结果为 +0。 |
Number | 直接返回。 |
String | 参见下文的文法和注释。 |
Symbol | TypeError |
Object | 执行下列步骤: 1. 设 primValue 为 ToPrimitive( 输入参数 , hint Number)。 2.返回 ToNumber(primValue)。 |
ToString
ToString 运算符根据下表将其参数转换为字符串类型的值:
输入类型 | 结果 |
---|---|
Undefined | “undefined” |
Null | “null” |
Boolean | 如果参数是 true,那么结果为 “true”。 如果参数是 false,那么结果为 “false”。 |
Number | 详见7.1.12.1NumberToString |
String | 直接返回 。 |
Symbol | TypeError |
Object | 执行下列步骤: 1、设 primValue 为 ToPrimitive( 输入参数 , hint String)。 2、返回 ToString(设 primValue 为 )。 |