0

我正在使用这个三元 if 语句:

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

我想把它改回标准的javascript(为了可读性)。我还想把它变成一个 if、else if、else 语句来测试变量是否为空/null。

这就是我所拥有的,它不起作用:

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

2 回答 2

1

为了可读性,我会从这样的事情开始,其中每个状态都被明确检查(有效和更改):

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]and a.changed[textProp](在这种情况下,textProp永远不能是"valid"or "changed")。更好的办法是将文本存储在 中a[textProp].text,并将标志存储在a[textProp].valid和中a[textProp].changed

于 2013-10-24T01:12:11.993 回答
1
if (_newText = null) {
             ^

需要是

if (_newText == null) {
             ^^

或者

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

你需要建立你的字符串

a[textProp] = 'Invalid Record';
于 2013-10-24T01:01:23.360 回答