【问题标题】:Is Array.toString() guaranteed to remain as is in ActionScript 3?Array.toString() 是否保证在 ActionScript 3 中保持不变?
【发布时间】:2011-10-04 15:47:00
【问题描述】:

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

【问题讨论】:

    标签: arrays actionscript-3 future-proof stringification


    【解决方案1】:

    这是描述来自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。

    因此,默认行为定义非常明确,不会改变。

    【讨论】:

    • 谢谢,正是我想要的!
    【解决方案2】:

    按原样使用它是安全的。 Array.toString() 自从 AS3 出现以来一直是一样的。

    【讨论】:

    • 这意味着它至少可以安全使用 :) 是否有语言标准或 Adob​​e 的声明?
    • 是的,所以在 AS3 中它从未改变过,也永远不会改变。没有官方声明或任何保证,但Array.toString() 肯定是语言中最不可能更改的方法之一。
    • 同意,Adobe 不太可能改变这种已建立的 API 的行为。但是,您的程序可以通过扩展 Array 并覆盖 toString() 或什至在 Array 原型对象(Javascript 样式)上设置另一个实现来执行此操作——当然,您会知道是否是这种情况。
    【解决方案3】:

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

    如果您担心这种行为不会改变,请明确使用Array.join()(或者,为了完全迂腐,Array.join(',')),您会很安全。由于存在 ActionScript,因此加入数组以这种方式工作,Adobe 绝对不可能对其进行更改并失去向后兼容性(以及,好吧,理智)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      相关资源
      最近更新 更多