Array.toString () гарантированно останется как в ActionScript 3? - PullRequest
0 голосов
/ 13 июля 2011

Можно ли отображать вывод Array.toString() пользователю или есть вероятность, что формат строки может измениться в будущих версиях ActionScript 3 или других компиляторов?

Ответы [ 3 ]

6 голосов
/ 14 июля 2011

Вот выдержка, описывающая Array.toString из ECMA-262 , за которой ActionScript 3 следует очень близко:

15.4.4.2

Array.prototype.toString () Когда вызывается метод toString, предпринимаются следующие шаги:
1. Пусть массив будет результатом вызова ToObject для значения this.
2. Пусть func будет результатом вызова внутреннего метода [[Get]] для массива с аргументом "join".
3. Если IsCallable (func) имеет значение false, тогда пусть func будет стандартным встроенным методом Object.prototype.toString (15.2.4.2).
4. Вернуть результат вызова внутреннего метода [[Call]] для func, предоставив массив в качестве значения this и пустой список аргументов.

И Array.join:

15.4.4.5

Array.prototype.join (разделитель) Элементы массива преобразуются в строки, а затем эти строки объединяются, разделяются вхождениями разделителя. Если разделитель не указан, в качестве разделителя используется одна запятая. Метод join принимает один аргумент-разделитель и выполняет следующие шаги:
1. Пусть O будет результатом вызова ToObject с передачей значения this в качестве аргумента.
2. Пусть lenVal будет результатом вызова внутреннего метода [[Get]] для O с аргументом "length".
3. Пусть len будет ToUint32 (lenVal).
4. Если разделитель не определен, пусть разделитель будет односимвольным String ",".
5. Пусть sep будет ToString (разделитель).
6. Если len равно нулю, вернуть пустую строку.
7. Пусть element0 будет результатом вызова внутреннего метода [[Get]] для O с аргументом "0".
8. Если element0 не определен или имеет значение null, пусть R будет пустой строкой; в противном случае, пусть R будет ToString (element0).
9. Пусть k будет 1.
10. Повторите, пока k а. Пусть S будет строковым значением, полученным путем конкатенации R и sep.
б. Пусть element будет результатом вызова внутреннего метода [[Get]] для O с аргументом ToString (k).
с. Если элемент не определен или имеет значение null, пусть next будет пустой строкой; в противном случае пусть next будет ToString (element).
д. Пусть R будет строковым значением, полученным путем конкатенации S и следующего.
е. Увеличьте k на 1.
11. Вернуть Р.

Итак, поведение по умолчанию очень хорошо определено и не изменится.

1 голос
/ 13 июля 2011

Безопасно использовать его как есть.Array.toString() был таким же, как AS3 вышел.

0 голосов
/ 14 июля 2011

Возвращаемое значение Array.toString() теперь равно значению Array.join().

Если вы что обеспокоены тем, что это поведение не меняется, используйте Array.join() (или,быть абсолютно педантичным, Array.join(',')) явно, и вы будете в безопасности.Присоединение к массиву работает таким образом, поскольку ActionScript существует, и маловероятно, что Adobe изменит что-либо на него и потеряет обратную совместимость (и, конечно же, здравомыслие).

...