Arrays Array.toString()是否保证保持ActionScript 3中的状态?

Arrays Array.toString()是否保证保持ActionScript 3中的状态?,arrays,actionscript-3,future-proof,stringification,Arrays,Actionscript 3,Future Proof,Stringification,向用户显示Array.toString()的输出是否合适,或者字符串格式是否有可能在ActionScript 3或其他编译器的未来版本中发生更改?按原样使用是安全的数组.toString()自AS3问世以来一直保持不变 现在Array.toString()的返回值等于Array.join()的返回值 如果您担心这种行为不会改变,请明确使用Array.join()(或者,要完全学究化,请使用Array.join(',')),这样您就安全了。加入array是这样工作的,因为ActionScript已

向用户显示
Array.toString()
的输出是否合适,或者字符串格式是否有可能在ActionScript 3或其他编译器的未来版本中发生更改?

按原样使用是安全的<代码>数组.toString()自AS3问世以来一直保持不变

现在
Array.toString()
的返回值等于
Array.join()
的返回值


如果您担心这种行为不会改变,请明确使用
Array.join()
(或者,要完全学究化,请使用
Array.join(',')
),这样您就安全了。加入array是这样工作的,因为ActionScript已经存在,Adobe绝对不可能对其进行更改,并失去向后兼容性(以及,嗯,理智)。

下面是一段描述array.toString的摘录,ActionScript 3紧跟其后:

15.4.4.2 Array.prototype.toString()调用toString方法时,将执行以下步骤:
1.让数组作为在此值上调用ToObject的结果。
2.设func是使用参数“join”调用数组的[[Get]]内部方法的结果。
3.如果IsCallable(func)为false,则将func设为标准的内置方法Object.prototype.toString(15.2.4.2)。
4.返回调用func提供数组的[[Call]]内部方法的结果作为此值和空参数列表

和Array.join:

15.4.4.5 Array.prototype.join(分隔符)将数组的元素转换为字符串,然后将这些字符串连接起来,并通过分隔符的出现进行分隔。如果未提供分隔符,则使用单个逗号作为分隔符。join方法接受一个参数separator,并执行以下步骤:
1.让O作为调用ToObject的结果,将此值作为参数传递。
2.让lenVal作为调用带有参数“length”的O的[[Get]]内部方法的结果。
3.让len成为ToUint32(lenVal)。
4.如果未定义分隔符,则将分隔符设为单个字符串“,”
5.设sep为字符串(分隔符)。
6.如果len为零,则返回空字符串。
7.让element0成为调用带有参数“0”的O的[[Get]]内部方法的结果。
8.如果element0未定义或为null,则R为空字符串;否则,设R为ToString(element0)。
9设k为1。
10当k A.设S为通过连接R和sep生成的字符串值。
B设元素是调用O的[[Get]]内部方法的结果,该方法的参数为字符串(k)。
C如果元素未定义或为空,则让next为空字符串;否则,让下一个是ToString(元素)。
D设R是通过连接S和next生成的字符串值。
E将k增加1。
11返回R


因此,默认行为定义得很好,不会改变。

这意味着至少到目前为止,使用它是安全的:)是否有一个语言标准或Adobe的一个声明可以做到这一点?是的,所以在AS3中它从未改变,也永远不会改变。没有官方声明或任何保证,但是
Array.toString()
肯定是该语言中任何方法中最不可能改变的方法之一。同意,Adobe改变这样一个已建立API的行为的可能性很小。但是,您的程序可以通过扩展数组并重写toString(),甚至在数组原型对象(Javascript样式)上设置另一个实现来实现这一点——当然,您会知道情况是否如此。谢谢,这正是我想要的!