如何在追加字符串Javascript时添加If语句

时间:2014-12-07 19:39:55

标签: javascript

美好的一天,

我很困惑如何在追加字符串时在循环中添加If语句。

继承我的代码

html += '<tr><td></td>'+
            '<td>'+moment(x.date_at).format('MM/DD/YYYY') +'</td>'+
            '<td>'+x.transactionType+'</td>'+
            '<td>'+x.id+'</td>'+
            '<td>'+if(x.description!=null){x.description}+'</td>'+
            '<td>'+x.ref_no+'</td>'+
            '<td class="align-right">'+x.debit+'</td>'+
            '<td class="align-right">'+x.credit+'</td>'+
            '<td class="align-right">'+val+'</td></tr>';
    });

然后我在IF部分遇到语法错误错误。谢谢您的帮助。它已经有一段时间了,因为我编码为什么我有点困惑。

4 个答案:

答案 0 :(得分:2)

您不能在代码中的任何位置放置if语句。如果您需要在该位置获得此功能,则需要使用三元if运算符?:

html += '<tr><td></td>'+
            '<td>'+moment(x.date_at).format('MM/DD/YYYY') +'</td>'+
            '<td>'+x.transactionType+'</td>'+
            '<td>'+x.id+'</td>'+
            '<td>'+ (x.description!=null ? x.description : '')+'</td>'+
            '<td>'+x.ref_no+'</td>'+
            '<td class="align-right">'+x.debit+'</td>'+
            '<td class="align-right">'+x.credit+'</td>'+
            '<td class="align-right">'+val+'</td></tr>';

如果你想使用if,你应该引入一个保存结果值的变量:

var temp = '';
if (x.description != null)
temp = x.description;
html += '<tr><td></td>'+
            '<td>'+moment(x.date_at).format('MM/DD/YYYY') +'</td>'+
            '<td>'+x.transactionType+'</td>'+
            '<td>'+x.id+'</td>'+
            '<td>'+ temp +'</td>'+
            '<td>'+x.ref_no+'</td>'+
            '<td class="align-right">'+x.debit+'</td>'+
            '<td class="align-right">'+x.credit+'</td>'+
            '<td class="align-right">'+val+'</td></tr>';

答案 1 :(得分:1)

你可以像这样使用shorthand if/else

html += '<td>'+(x.description!=null ? x.description : '' )+'</td>';

在您的代码中:

html += '<tr><td></td>'+
            '<td>'+moment(x.date_at).format('MM/DD/YYYY') +'</td>'+
            '<td>'+x.transactionType+'</td>'+
            '<td>'+x.id+'</td>'+
            '<td>'+(x.description!=null ? x.description : '' )+'</td>'+
            '<td>'+x.ref_no+'</td>'+
            '<td class="align-right">'+x.debit+'</td>'+
            '<td class="align-right">'+x.credit+'</td>'+
            '<td class="align-right">'+val+'</td></tr>';

答案 2 :(得分:1)

我认为你只需要像这样打破你的连接:

html += '<tr><td></td>'+
            '<td>'+moment(x.date_at).format('MM/DD/YYYY') +'</td>'+
            '<td>'+x.transactionType+'</td>'+
            '<td>'+x.id+'</td>';

if(x.description!=null) html+=  '<td>' + {x.description} + '</td>';

html +=     '<td>'+x.ref_no+'</td>'+
            '<td class="align-right">'+x.debit+'</td>'+
            '<td class="align-right">'+x.credit+'</td>'+
            '<td class="align-right">'+val+'</td></tr>';
    });

答案 3 :(得分:0)

您不能像这样使用 if 。根本的问题是,在JavaScript中, if 是语句,而不是表达式,并且它不返回任何值(与Scala等更严格的功能语言不同,其中所有内容都是表达式并产生值)

因此,您有以下选择:

  1. 使用三元条件运算符?:会产生一个值,并且实际上可以在表达式中使用:

    ... + x.description? x.description:``+ ...

唯一的不便之处在于,您始终需要一个else值,因此,仅在 description 中检查是否为null时,您需要提供一个空字符串作为替代。当您需要打印很多字段时可能会很麻烦。

  1. 在格式化范围内使用帮助器功能。如果您只有一个大对象要格式化,这是一个很好的解决方案:

const source = {
  first: 'first',
  second: null,
  third: 'third',
}

function fmt(key) {
  return source[key]? source[key] : ''
}

let html = '<div><hr>'
  + fmt('first') + '<hr>'
  + fmt('second') + '<hr>'
  + fmt('third') + '<hr>'
  + '</div>'
 
document.write(html)

  1. 作为?:运算符的更紧凑替代方案,可以使用||。这样的运算符:

   const s = {
      first: 'first',
      second: null,
      third: 'third',
    }

    let html = '<div><hr>'
      + (s.first || '') + '<hr>'
      + (s.second || '') + '<hr>'
      + (s.third || '') + '<hr>'
      + '</div>'
     
    document.write(html)

我想这比#1更优雅,因为您不必重复进行两次属性访问:)