是否可以向Array.toString()
用户显示输出,或者字符串格式是否有可能在 ActionScript 3 或其他编译器的未来版本中发生变化?
3 回答
这是描述 Array.toString 的ECMA-262的摘录,ActionScript 3 非常严格地遵循:
15.4.4.2
Array.prototype.toString() 调用toString方法时,有以下步骤:
1. 令array为对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 为使用参数“length”调用 O 的 [[Get]] 内部方法的结果。
3. 设 len 为 ToUint32(lenVal)。
4. 如果未定义separator,则令separator 为单字符字符串“,”。
5. 让 sep 为 ToString(separator)。
6. 如果 len 为零,则返回空字符串。
7. 令 element0 为使用参数“0”调用 O 的 [[Get]] 内部方法的结果。
8、如果element0为undefined或null,则令R为空String;否则,令 R 为 ToString(element0)。
9. 让 k 为 1。
10. 重复,同时 k < len
a。让 S 是通过连接 R 和 sep 产生的字符串值。
湾。令 element 为使用参数 ToString(k) 调用 O 的 [[Get]] 内部方法的结果。
C。如果元素未定义或为空,则让 next 为空字符串;否则,让 next 成为 ToString(element)。
d。令 R 为通过连接 S 和 next 生成的 String 值。
e. 将 k 增加 1。
11. 返回 R。
因此,默认行为是非常明确的,并且不会改变。
按原样使用它是安全的。Array.toString()
自从 AS3 出来以来一直如此。
的返回值Array.toString()
现在等于 的返回值Array.join()
。
如果您担心这种行为不会改变,请明确使用Array.join()
(或者,为了完全迂腐,Array.join(',')
),您将是安全的。加入数组以这种方式工作,因为 ActionScript 存在,Adobe 绝对不可能对其进行更改并失去向后兼容性(以及,好吧,理智)。