ToString
ToString 运算符根据下表将其参数转换为字符串类型的值:
输入类型 | 结果 |
---|---|
Undefined | "undefined" |
Null | "null" |
Boolean | 如果参数是 true,那么结果为 "true"。 如果参数是 false,那么结果为 "false"。 |
String | 结果等于输入的参数(不转换)。 |
Number | 参见下文的文法和注释。 |
Object | 应用下列步骤:
|
对数值类型应用 ToString
ToString 运算符将数字 m 转换为字符串格式的给出如下所示:
- 如果 m 是 NaN,返回字符串 "NaN"。
- 如果 m 是 +0 或 -0,返回字符串 "0"。
- 如果 m 小于零,返回连接 "-" 和 ToString (-m) 的字符串。
- 如果 m 无限大,返回字符串 "Infinity"。
- 否则,令 n, k, 和 s 是整数,使得 k ≥ 1, 10k-1 ≤ s < 10k,s × 10n-k 的数字值是 m,且 k 足够小。要注意的是,k 是s 在十进制表示中的数字的个数。s 不被 10 整除,且s 的至少要求的有效数字位数不一定要被这些标准唯一确定。
- 如果 k ≤ n ≤ 21,返回由 k 个 s 在十进制表示中的数字组成的字符串(有序的,开头没有零),后面跟随字符 '0' 的n-k 次出现。
- 如果 0 < n ≤ 21,返回由 s 在十进制表示中的、最多 n 个有效数字组成的字符串,后面跟随一个小数点 '. ',再后面是余下的 k-n 个 s 在十进制表示中的数字。
- 如果 -6 < n ≤ 0,返回由字符 '0' 组成的字符串,后面跟随一个小数点 '. ',再后面是字符 '0' 的 -n 次出现,再往后是k 个 s 在十进制表示中的数字。
- 否则,如果 k = 1,返回由单个数字 s 组成的字符串,后面跟随小写字母 'e',根据 n-1 是正或负,再后面是一个加号 '+' 或减号 '-' ,再往后是整数 abs(n-1) 的十进制表示(没有前置的零)。
- 返回由 s 在十进制表示中的、最多的有效数字组成的字符串,后面跟随一个小数点 '. ',再后面是余下的是 k-1 个 s在十进制表示中的数字,再往后是小写字母 'e',根据n-1 是正或负,再后面是一个加号 '+ ' 或减号 '-' ,再往后是整数 abs(n-1) 的十进制表示(没有前置的零)。
下面的评语可能对指导实现有用,但不是本标准的常规要求。
- 如果 x 是除 -0 以外的任一数字值,那么 ToNumber ( ToString (x)) 与 x 是完全相同的数字值。
- s 至少要求的有效数字位数并非总是由步骤 5 中所列的要求唯一确定。
对于那些提供了比上面的规则所要求的更精确的转换的实现,我们推荐下面这个步骤 5 的可选版本,作为指导:
否则,令 n, k, 和 s 是整数,使得 k ≥ 1, 10k-1 ≤ s < 10k,s × 10n-k 的数字值是 m,且 k 足够小。如果有数倍于 s 的可能性,选择 s × 10n-k 最接近于 m 的值作为 s 的值。如果 s有两个这样可能的值,选择是偶数的那个。要注意的是,k 是 s 在十进制表示中的数字的个数,且 s 不被 10 整除。
ECMAScript 的实现者们可能会发现,David M 所写的关于浮点数进行二进制到十进制转换方面的文章和代码很有用:
Gay, David M. Correctly Rounded Binary-Decimal and Decimal-Binary Conversions. Numerical Analysis Manuscript 90-10. AT&T Bell Laboratories (Murray Hill, New Jersey). November 30, 1990. 在这里取得 http://cm.bell-labs.com/cm/cs/doc/90/4-10.ps.gz 。有关的代码在这里 http://cm.bell-labs.com/netlib/fp/dtoa.c.gz 还有 http://cm.bell-labs.com/netlib/fp/g_fmt.c.gz 。这些都可在众多的 netlib 镜像站点上找到。
更多建议: