Как превратить тройной оператор if обратно в стандартный javascript?

Я работаю с этим троичным оператором if:

a[textProp] = _newText + ' (' + (_newText === a[textProp] ? 'no change' : 'changed') + ')';

И я бы хотел вернуть его в стандартный javascript (для удобства чтения). Я также хочу превратить его в оператор if, else if, else, чтобы проверить, является ли переменная пустой / нулевой.

Это то, что у меня не работает:

if (_newText = null) {
'Invalid Record';
}
else if (_newText === a[textProp]) {
'no change';
}
else(_newText != a[textProp]) {
'changed';
}
+ ')';

person Miles Pfefferle    schedule 24.10.2013    source источник
comment
Вы не получаете ошибку, используя тест в операторе else?   -  person A.L    schedule 24.10.2013


Ответы (2)


if (_newText = null) {
             ^

должно быть

if (_newText == null) {
             ^^

or

if (_newText === null) {
             ^^^

И вам нужно построить свою строку

a[textProp] = 'Invalid Record';
person epascarello    schedule 24.10.2013

Для удобства чтения я бы начал с чего-то вроде этого, где каждое состояние проверяется явно (действительно и изменено):

var isValid = true;
if (_newText == null || _newText.trim().length === 0) {
  isValid = false;
}

var hasChanged = false;
if (isValid && _newText !== a[textProp]) {
  hasChanged = true;
}

if (!isValid) {
  a[textProp] = 'Invalid Record';
}
else if (hasChanged) {
  a[textProp] = _newText + ' (changed)';
}
else {
  a[textProp] += ' (no change)';
}

Но я также считаю неправильным хранить результат тестов в виде строки внутри a[textProp], это может сделать недействительными будущие тесты. Вероятно, у меня были бы отдельные ключи для результатов теста (как флаг), например: a.valid[textProp] и a.changed[textProp] (в этом случае textProp никогда не может быть "valid" или "changed"). Еще лучше было бы хранить текст в a[textProp].text, а флаги в a[textProp].valid и a[textProp].changed.

person Jordão    schedule 24.10.2013
comment
Мне все еще не удается заставить работать недействительную запись. Проверьте мою скрипку jsfiddle.net/pfeff/WnaBD/1 - person Miles Pfefferle; 24.10.2013
comment
Попробуйте этот. Обратите внимание: то, что я упомянул, произойдет, если вы нажмете кнопку несколько раз. - person Jordão; 24.10.2013
comment
Я заметил это раньше, но посмотрите 9-й пункт списка. У него нет номера записи, поэтому я хочу, чтобы к нему было добавлено что-то вроде «недействительно», а не без изменений. Любые идеи? - person Miles Pfefferle; 24.10.2013