Текущая активная связь с JS ES6

Строки в Java неизменяемы. Это означает, что всякий раз, когда вы пытаетесь изменить / изменить строку, вы получаете новый экземпляр. Вы не можете изменить исходную строку. Это сделано для того, чтобы эти экземпляры строк могли кэшироваться. Типичная программа содержит множество ссылок на строки и кеширование этих экземпляров, что может уменьшить объем памяти и увеличить производительность программы.

При использовании оператора == для сравнения строк вы не сравниваете содержимое строки , но фактически сравнивают адрес памяти. Если они равны, в противном случае они вернут true и false. Если значение равно в строке, сравнивает содержимое строки.

Итак, вопрос в том, что все строки кэшируются в системе, как получается == возвращает false, тогда как equals возвращает true? Ну, это возможно. Если вы создадите новую строку, например String str = new String("Testing"), вы создадите новую строку в кеше, даже если в кеше уже содержится строка с тем же содержимым. Короче говоря, "MyString" == new String("MyString") всегда будет возвращать false.

Java также говорит о функции intern (), которая может использоваться в строке, чтобы сделать ее частью кеша, поэтому "MyString" == new String("MyString").intern() вернет true.

Примечание: == оператор намного быстрее, чем равен только потому, что вы сравниваете два адреса памяти, но вы должны быть уверены, что код не создает новые экземпляры String в коде. В противном случае вы столкнетесь с ошибками.

1
задан Oliver Stott 10 March 2019 в 01:45
поделиться

1 ответ

Я бы удалил все классы .active, если вы нажмете на ссылку меню и установите класс .active для нажатой ссылки.

const links = document.querySelectorAll('.links > a');

const changeActive = (e) => {
  [...links].forEach(link => link.classList.remove('active'));
  e.target.classList.add('active');
}

[...links].forEach(e => e.addEventListener('click', changeActive));
.active {
  font-weight: bold;
}
<div class="navbar">
  <a href="#" class="toggle" id="nav-hamburger">
    <i class="fas fa-bars"></i>
    <a href="#" class="brand">Appeal Digital</a>
  </a>
  <div class="links">
    <a href="#" class="link active">Home</a>
    <a href="#" class="link">Who are we?</a>
    <a href="#" class="link">Meet the Team</a>
    <a href="#" class="link">Contact Us</a>
  </div>
</div>

0
ответ дан d-h-e 10 March 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: