单线条件操作

时间:2017-01-23 02:09:57

标签: javascript if-statement conditional

在switch语句的情况下,我有多次以下条件结构。 (见箭头)

  switch (field.target.name) {
    case "email":
      if (!isEmail(field.target.value)) {  <-----------
        dispatch('has_error', field)       <-----------
      }                                    <-----------
      return                               <-----------
    case "phoneNumber":
    case "companyPhoneNumber":
      if (!isMobilePhone(field.target.value, 'en-CA')) {
        dispatch('has_error', field)
      }
      return
  }

我想缩短它,所以它不会占用4行。我可以做点像

!isEmail(field.target.value) ? dispatch('has_error', field) : null
return

但这似乎很尴尬。

那里有任何优雅的解决方案吗?

3 个答案:

答案 0 :(得分:3)

您当前的代码可读且很好。你可以把它写成

return !isEmail(field.target.value) && dispatch('has_error', field);

return isEmail(field.target.value) || dispatch('has_error', field);

这结合了两种&#34;技术&#34;:

  1. 在某行语句的同一行使用return,以便执行该语句,然后立即从函数返回。但是,这可能会令人困惑 - 您的代码的读者可能认为返回值在某种程度上很重要。并且仅当函数通常不会返回任何内容时才有效。

  2. if (a) b写为a && b(或if (!a) ba || b)。但是这种编写等效于if语句的方法通常不赞成过于简洁 - 它隐藏了逻辑的基本if性质。此外,如果以独立的方式使用,如a && b;,许多短语(正当地)会抱怨独立表达。

答案 1 :(得分:0)

做这样的事情是有效的:

if (!isEmail(field.target.value)) return dispatch('has_error', field);

但有些人并不关心这种情况有多长。

答案 2 :(得分:0)

尝试以下内容,如果isEmail(field.target.value)返回false,则会执行dispatch('has_error', field)

isEmail(field.target.value) || dispatch('has_error', field);
return;