В чем смысл условия во второй строке?

200
22 марта 2018, 10:35
function addClass(obj, cls) {
  var classes = obj.className ? obj.className.split(' ') : [];
  for (var i = 0; i < classes.length; i++) {
    if (classes[i] == cls) return; // класс уже есть
  }
  classes.push(cls); // добавить
  obj.className = classes.join(' '); // и обновить свойство
}
var obj = {
  className: 'open menu'
};
addClass(obj, 'new');
addClass(obj, 'open');
addClass(obj, 'me');
alert(obj.className) // open menu new me

По условию нужно создать функцию addClass(obj, cls), которая добавляет в список класс cls, но только если его там еще нет и она не должна добавлять лишних пробелов.

Answer 1

Смысл условия - предотвратить ошибку, если className отсутствует.

var obj = {}; // no className 
 
var classes = obj.className ? obj.className.split(' ') : [];  
console.log(classes); // пустой массив (классов нет) 
    
classes = obj.className.split(' '); // Ошибка

PS: Рекомендую воспользоваться classList

Answer 2
var classes = obj.className ? obj.className.split(' ') : [];

В classes нужно положить массив всех классов элемента.

Читаем как работает тернарный оператор ?: - ссылка.

Если obj.className пуст, то возвращаем пустой массив [];

Если там есть содержание то возвращаем результат действия split.

Функция split дробит строку на части превращая в массив, используя для разделения разделитель из аргумента.

Всю эту функцию можно переписать более коротко

obj.classList.add(cls);

Используя современный синтаксис языка и переменную classList у тега.

READ ALSO
Слишком большой размер файла nw js

Слишком большой размер файла nw js

Вот пишу первое приложение на nwjs

234
Как получить данные из массива js? [дубликат]

Как получить данные из массива js? [дубликат]

На данный вопрос уже ответили:

169
Почему не выполняется условие if else в javascript?

Почему не выполняется условие if else в javascript?

Добрый деньЯ только разбираюсь с JavaScript, пробую написать простой скрип с условиями

175
Как можно удалить символы в одинаковых классах без замещения с помощью .text()? код внутри

Как можно удалить символы в одинаковых классах без замещения с помощью .text()? код внутри

Есть код который удаляет определённые символы (в частности "руб") в одинаковых классах

121