Несмотря на отсутствие возможности определить, как копируются строки, по ссылке или по значению, существует возможность написать такой фрагмент на JavaScript, с помощью которого можно выяснить, как именно выполняется опе_ рация сравнения – по ссылке или по значению. В примере 3.4 приводится фраг_ мент, выполняющий такую проверку.
Пример 3.4. Как сравниваются строки, по ссылке или по значению?
// Определить, как сравниваются строки, по ссылке или по значению,
// довольно просто. Здесь сравниваются совершенно разные строки, содержащие
// одинаковые последовательности символов. Если сравнение выполняется
// по значению, они должны интерпретироваться как эквивалентные, если же они
// сравниваются по ссылке, результат должен быть противоположным:
var s1 = "hello";
var s2 = "hell" + "o";
if (s1 == s2) document.write("Строки сравниваются по значению");
Данный эксперимент доказывает, что строки сравниваются по значению. Это может оказаться сюрпризом для некоторых программистов, работающих с язы_ ками C, C++ и Java, где строки относятся к ссылочным типам и сравниваются по ссылке. При необходимости сравнить в этих языках фактическое содержимое строк приходится использовать специальные методы или функции. Язык Java_ Script относится к языкам высокого уровня и потому предполагает, что когда выполняется сравнение строк, скорее всего, имеется в виду сравнение по значе_ нию. Таким образом, несмотря на то, что с целью достижения более высокой эф_ фективности строки в JavaScript (по_видимому) копируются и передаются по ссылке, тем не менее операция сравнения выполняется по значению.