Почему некоторым функциям, например toLowerCase()
при использовании в строке, должна быть назначена новая переменная, но другие функции, такие как sort()
, reverse()
или pop()
, не используются в массиве?
Например, приведенный ниже код неправильный:
var str = "Hello World";
str.toLowerCase();
но приведенный ниже код верен:
var arr = ["This","is","my","array"]
arr.sort();
Я читаю, что при использовании toLowerCase()
в строке я должен иметь код, написанный следующим образом:
str = str.toLowerCase();
Поскольку строки являются неизменяемыми в JavaScript, это означает, что вы не можете их изменить. Каждый раз, когда вы пытаетесь изменить строку, вы фактически создаете новую строку с изменениями.
Поэтому, когда вы делаете str.toLowerCase();
, он не модифицирует str
, на самом деле делает копию его в нижнем регистре букв.
Массив отличается, потому что это список ссылок на элементы массива. Вы можете изменить каждый элемент отдельно от других пунктов arr[5]=11
. Вы также можете добавить или удалить элемент. Функции sort()
и reverse()
переупорядочивают элементы массива.
Кстати, эта концепция не уникальна для JavaScript. Многие другие современные языки также делают строки неизменяемыми (возможно, все языки, которые имеют String
как встроенный тип).