Для JavaScript в большинстве браузеров * вы можете читать символ из строки, рассматривая его как массив. Однако во всех браузерах, которые я пробовал (IE9, Chrome, Firefox), вы не можете писать в него как массив.
Например :
var string = 'hello world';
alert(string[0]);//alerts 'h'
alert(string);//alerts 'hello world'
string[0]='j';
alert(string[0]);//alerts 'h'
alert(string);//alerts 'hello world'
Это имеет последствия не только для разработчиков JavaScript:
jelloPeople.roam();
Кто-нибудь знает причину этого?
Например, я посмотрел документацию Mozilla , и они ссылаются на это, но не дают объяснения:
".. попытка установить символ с помощью индексации не выдает ошибку, но сама строка не изменяется."
Итог: мне странно и странно, что некоторые свойства массива были переданы Strings, а не другим.
UPDATE:
Хорошо, поэтому строки JavaScript являются неизменяемыми объектами, но почему? Похоже, что операции, подобные приведенным выше, были бы быстрее, если бы они не были неизменяемыми (измените 1 символ вместо создания новой строки из 11 символов). На самом деле, я не вижу случая с функциями String, где производительность была бы отрицательно сказана, если бы они не были неизменными, но я вижу несколько случаев, когда производительность будет улучшена. Кроме того, в JavaScript нет настоящей многопоточности, поэтому нет никаких преимуществ для неизменяемых.
(удалено и будет исследовать это и, возможно, задать новый вопрос)
* Не IE 6 или 7