# Clean your JavaScript code

  • 按条件给变量赋值
a > b ? (foo = 'value1') : (foo = 'value2')

// better
foo = a > b ? 'value1' : 'value2'
  • 按条件给属性赋值
a > b ? (foo.prop1 = 'value') : (foo.prop2 = 'value')

// better
foo[a > b ? 'prop1' : 'prop2'] = 'value'
  • 利用解构赋值
let a = foo.prop1
let b = foo.prop2

// better
let { prop1: a, prop2: b } = foo

// ---

let c = bar[0]
let d = bar[1]

// better
let [c, d] = bar
  • 获取多个 DOM 引用
let a = document.querySelector('selector1')
let b = document.querySelector('selector2')
let c = document.querySelector('selector3')

// better
let [a, b, c] = ['selector1', 'selector2', 'selector3'].map(item => document.querySelector(item))
  • 按条件执行
if (foo) {
  doSomething()
}

// better
foo && doSomething()
  • 使用科学计数法
const MAX_VALUE = 9900000000

// better
const MAX_VALUE = 99e8
  • 对于参数可能是 T 或者 T[] 类型时内容可以将接受到的 T 变为 T[] 这样内部只需要处理一种情况
function demo(strArr) {
  if (!Array.isArray(strArr)) {
    strArr = [strArr]
  }

  // do something
}
  • 针对一个变量的值在多重情况下做同以操作时,可以借助数组
function demo(p) {
  /*
  if (p === "case1" || p === "case2" || p === "case3") {
  }
  */

  const cases = ['case1', 'case2', 'case3']
  if (~cases.indexOf(p)) {
  }
}
  • 在获取数组的值时,如果这个值可能不存在,我们可以提供一个备用数组来提供默认值
/**
 * 获取小数点后的的位数
 */
function getDecimalLen(val) {
  // 可能这并不是一个好的例子,不过只是为了说明做法,比如还可以使用在获取正则 match 匹配的结果
  return (val.toString().split('.') || [, ''])[1].length
}
  • 按条件在数组中添加值
if (foo) {
  config.push({})
}

// better
const config = [foo && {}].filter(Boolean)
  • 申明初始具有多项值的字符串数组
const supportExt = ['ext1', 'ext2', 'ext3']

// better
const supportExt = 'ext1 ext2 ext3'.split(/\s+/)
  • 按条件调用不同的方法进行处理
function demo(type) {
  if (type === 'a') {
    a()
  }
  if (type === 'b') {
    b()
  }
  if (type === 'c') {
    c()
  }
}

// better
function demo(type) {
  ;({
    a() {},
    b() {},
    c() {},
  }[type]())
}