Да.
|
прикольно :)
|
Цитата:
получается б толком не удалилась? как это соотносится с отличиями в создании переменной? хм, ну теоретически я понял впрочем.:) |
как раз b удалилась
var a = 1; b = 2; alert([window['a'], window['b']]); без var в window создается соответствующее свойство |
x-yuri,
а теперь понял. Т.е. с варом получается этакая независимая (от глобального объекта) переменная? |
Цитата:
|
Всем привет, всех с прошедшим! (:
Тоже недавно начал изучать Флэнагана, поэтому решил втиснуться с вопросами в эту темку, надеюсь автор топика не будет против. ;) К сути: Прочитал про разницу в работе с переменными "по значению" и "по ссылке" и возник вопрос по строкам - для "иллюстрации" передачи элементарных типов по значению Флэнаган применяет такой код: var a = 3; var b = a; a = 4; alert(b); // показывает 3 Но он говорит что строки в js неизменяемы и поэтому проверить как они передаются (по ссылке или по значению) невозможно, т.к. аналогичный код для строк не будет работать, хотя можно установить что сравниваются они по значению: var s1 = "text"; var s2 = "tex" + "t"; alert(s1 == s2); // true Но у меня возник вопрос, а что все-таки мешает сделать для строк такую проверку: var str1 = "bunny"; var str2 = str1; str1 = "rabbid"; alert(str2);// показывает bunny По идее это показывает что строки копируются по значению, в чем тут тогда загвостка? P.S. Кстати, почему во втором отрывке кода нет нумерации строк? Тот же тэг JS использовал... P.P.S. Подумал, посидел, еще подумал, почитал немного дальше и пришла в голову такая мысль - получается что в описанном мною примере в str1 содержится не строка bunny, а ссылка на неё, а при "присваивании" ей новой строки "rabbid" мы создаем эту новую строку и в str1 записываем ссылку на неё, а в str2 у нас просто ссылка на первую строку, которая не удалилась, т.к. на неё еще есть "активная" ссылка. Что-то в этом роде? |
Kepa,
все переменные в JS передаются по значению. Просто в случае объектов значением является ссылка на объект. Это сначала трудно осознать, но потом всё встаёт на свои места. http://dmitrysoshnikov.com/ecmascrip...tion-strategy/ |
Числа и строки - элементарный тип данных и передаются они по значению.
А происходит это потому, что ссылочные типы данных не имеют фиксировнного размера и не могут храниться в выделенных 8 байтах памяти. var a = '10', b = '10'; alert(a*b); //100 выполняем операцию умножения со строковыми операндами, результат которых будет преобразован в числовое значение. var a = '10', b = '10'; alert(parseInt(a)+parseInt(b)); //20 выполняем операцию сложения со строковыми операндами, результат которых будет преобразован в числовое значение. Метод parseInt() преобразует значение в числовое, т.к. опрератор + может работать как со строками так и с числами Цитата:
|
Цитата:
var a = '10', b = '10'; alert(a+b); //20 выполняем операцию сложения со строковыми операндами, результат которых будет преобразован в числовое значение. |
Часовой пояс GMT +3, время: 16:14. |