Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.11.2011, 14:33
Новичок на форуме
Отправить личное сообщение для Bbore Посмотреть профиль Найти все сообщения от Bbore
 
Регистрация: 18.11.2011
Сообщений: 2

Правда ли строки в JavaScript неизменяемы?
У Фленагана написано, что строки в JavaScript неизменяемые. Как-то никогда не заострял на этом внимания...

Но почему тогда работает код:
var s1 = "hello";
var s2 = "hell" + "o";
s2 = s2 + "o";

Ведь я не переопределяю, а изменяю переменную...
Ответить с цитированием
  #2 (permalink)  
Старый 18.11.2011, 15:02
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Сообщение от Bbore Посмотреть сообщение
Ведь я не переопределяю, а изменяю переменную...
Переменную изминить нельзя. Переменная всего лишь ссылкается на какой то тип данных. Причём вы даже не меняете тип данных - строку, а складываете две строки и в итоге результат операции - новая строка.
Ну и собственно как написали выше Строка почти буффер. А возможно и в реализациях движков это так и есть.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #3 (permalink)  
Старый 18.11.2011, 15:51
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от nasqad
обьект String - readonly
False:

var str = new String('value');
str.prop = 'prop value';
alert(str.prop);
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #4 (permalink)  
Старый 18.11.2011, 17:52
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Таки реальное значение строки не поменять, наверно это имел введу человек. Хотя если брать примитив, то там естественно и обычное свойство невозможно присвоить.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #5 (permalink)  
Старый 18.11.2011, 19:37
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Вот это правильное объяснение. Даже в объекте String нельзя. Но можно делать хитро:
var str = new String('data'),
  data;

str.toString = function(){
  return data || ''.toString.call(this);
};

alert(str);
data = 'newData';
alert(str);


Т.е. можно использовать один объект, но значения он может возвращать разные.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 18.11.2011 в 19:40.
Ответить с цитированием
  #6 (permalink)  
Старый 18.11.2011, 21:36
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Интересно, но вряд ли применимо. Скорее даже бессмысленно. Разве что в каком нибудь особом приложении нужна возможность выводить строки разных форматах/кодировках, или ещё что то с ними там проворачивать. Тогда можно реализовать через прототип, правда тоже сомнительно.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #7 (permalink)  
Старый 18.11.2011, 21:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

B~Vladi, В этом я вижу только способ жестоко вы*ть мозги прогеру-недругу в команде.))
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 18.11.2011, 21:49
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

B~Vladi, это как #define true false в С. Убей дебаггера))
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #9 (permalink)  
Старый 18.11.2011, 21:54
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Aetae, если это документировано, или скрыто в нутрях твоего API, то никаких проблем не возникнет.
Сообщение от Nekromancer
Интересно, но вряд ли применимо.
Не стоит придумывать нереальных задач. Нужно только помнить о том, что JS не строго-типизированный язык и когда объект преобразуется в текстовое значение - для этого вызывается нативный метод toString, который можно изменить. Если ты не поленишься и вникнешь в эти исходники, то поймешь, что это достаточно юзабельный вариант. Мне он очень помог и решения лучше я не придумал.
Если лень - могу объяснить.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 18.11.2011 в 21:58.
Ответить с цитированием
  #10 (permalink)  
Старый 18.11.2011, 21:57
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от trikadin
это как #define true false в С. Убей дебаггера))
Я не знаю СИ, но суть понятна. Вообще, про СИ говорят, что это опасный язык, так что там много чего можно наворотить
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Правда ли то, что с помощью JQuery можно сделать все, что связано с JavaScript? Bandicoot Оффтопик 3 10.03.2011 15:09
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Выполнение javascript из строки запроса браузера Freund Javascript под браузер 2 08.09.2009 07:25