Array.toString() гарантированно останется как в ActionScript 3?
Это нормально, чтобы отобразить вывод Array.toString()
пользователю или есть вероятность того, что формат строки может измениться в будущих версиях ActionScript 3 или других компиляторов?
3 ответа
Вот отрывок, описывающий 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. Вернуть Р.
Таким образом, поведение по умолчанию очень хорошо определено и не изменится.
Это безопасно использовать как есть. Array.toString()
было то же самое с тех пор, как вышла AS3.
Возвращаемое значение Array.toString()
в настоящее время равно тому из Array.join()
,
Если вы обеспокоены тем, что это поведение не меняется, используйте Array.join()
(или, чтобы быть полностью педантичным, Array.join(',')
) явно, и вы будете в безопасности. Присоединение к массиву работает таким образом, поскольку ActionScript существует, и совершенно маловероятно, что Adobe изменит что-то на него и потеряет обратную совместимость (и, конечно же, здравомыслие).