【发布时间】:2011-10-04 15:47:00
【问题描述】:
是否可以向用户显示Array.toString() 的输出,或者字符串格式是否有可能在 ActionScript 3 或其他编译器的未来版本中发生变化?
【问题讨论】:
标签: arrays actionscript-3 future-proof stringification
是否可以向用户显示Array.toString() 的输出,或者字符串格式是否有可能在 ActionScript 3 或其他编译器的未来版本中发生变化?
【问题讨论】:
标签: arrays actionscript-3 future-proof stringification
这是描述来自ECMA-262 的 Array.toString 的摘录,ActionScript 3 非常紧跟它:
15.4.4.2
Array.prototype.toString() 调用toString方法时,执行如下步骤:
1. 令数组为对 this 值调用 ToObject 的结果。
2. 令func为参数“join”调用数组的[[Get]]内部方法的结果。
3. 如果 IsCallable(func) 为 false,则令 func 为标准内置方法 Object.prototype.toString (15.2.4.2)。
4. 返回调用func提供数组的[[Call]]内部方法的结果作为this值和一个空参数列表。
还有 Array.join:
15.4.4.5
Array.prototype.join (separator) 将数组的元素转换为字符串,然后将这些字符串连接起来,由出现的分隔符分隔。如果未提供分隔符,则使用单个逗号作为分隔符。 join 方法接受一个参数,即分隔符,并执行以下步骤:
1. 令 O 为调用 ToObject 并将 this 值作为参数传递的结果。
2. 设 lenVal 为调用 O 的 [[Get]] 内部方法的结果,参数为“length”。
3. 设 len 为 ToUint32(lenVal)。
4.如果未定义separator,则令separator为单字符字符串“,”。
5. 让 sep 为 ToString(分隔符)。
6. 如果 len 为零,则返回空字符串。
7. 令 element0 为使用参数“0”调用 O 的 [[Get]] 内部方法的结果。
8、如果element0为undefined或null,则令R为空String;否则,令 R 为 ToString(element0)。
9. 让 k 为 1。
10. 重复,而 k 一种。令 S 为通过连接 R 和 sep 生成的字符串值。
湾。令 element 为使用参数 ToString(k) 调用 O 的 [[Get]] 内部方法的结果。
C。如果元素未定义或为空,则让 next 为空字符串;否则,让 next 成为 ToString(element)。
d。令 R 为通过连接 S 和 next 生成的字符串值。
e.将 k 增加 1。
11.返回R。
因此,默认行为定义非常明确,不会改变。
【讨论】:
按原样使用它是安全的。 Array.toString() 自从 AS3 出现以来一直是一样的。
【讨论】:
Array.toString() 肯定是语言中最不可能更改的方法之一。
Array.toString() 的返回值现在等于 Array.join() 的返回值。
如果您那担心这种行为不会改变,请明确使用Array.join()(或者,为了完全迂腐,Array.join(',')),您会很安全。由于存在 ActionScript,因此加入数组以这种方式工作,Adobe 绝对不可能对其进行更改并失去向后兼容性(以及,好吧,理智)。
【讨论】: