js优化(只谈写法)

Best practices

  • ===,而不是==,遇到不同类型时,容易出问题
  • 不使用eval,相当降低js的表现,还会有risk
if(someVariableExists)
   x = false
//不要省略括号,除非有return
if(true) return 'nicely done';
  • for循环中的数组长度,如果是外部读取的,可以先存起来
  • for遍历Object不要使用in,Object.keys()最佳
  • 尽量少的使用Global value
    var firstName = 'John',
        lastName = 'Snow';
    //better
    var obj={
        firstName: 'John',
        lastName: 'Snow'
    }
    
  • use{}而不是new Object(),use[]而不是new Array
  • switch要用default结尾
  • Undefined is Not Null
  • 替换和查找尽量多的使用RegExp,正则是C的API
  • x++ is better than x = x +1
  • 把数字转换成字符串性能上("" +) > String() > .toString() > new String()
  • 尽量多的使用js的内部对象,比如浮点数转换成整型Math.roundis better than parseInt,后者是把字符串转化为数字
  • 大的js对象尽量使用缓存
  • &&||短路表达式这里,比如我项目中的鉴权页面工具的一个代码片段:
name === 'login' ? user.token && redirect('/home') : isLoginRoute(name) && !user.token && process.browser && redirect('/login')

算法相关

  • 快排wiki是这个写法,也可以这么写
const quickSort = (arr) => {   
	if (arr.length <= 1) return arr;
    const [head, ...tail] = arr;
    const less = tail.filter(i => i <= head);
    const greater = tail.filter(i => i > head);
    return quickSort(less).concat([head]).concat(quickSort(greater));
};
  • 递归
const factorial = number => {
  let product = 1;
  for (let i = 2; i <= number; i++) {
    product *= i;
  }
  return product;
};
//better
//尾调用优化 了解一下
const factorial = number => {
  return number < 2 ? 1 : number * factorial(number - 1);
};
  • 二分法查找
const binarySearch = (arr, l, r, target) => {
  if (l > r) return -1;
  // var mid = l+ Math.floor((r-l)/2);
  var mid = (l + r) >> 1;
  if (arr[mid] === target) {
    return mid;
  } else if (arr[mid] > target) {
    return binarySearch(arr, l, mid - 1, target);
  } else {
    return binarySearch(arr, mid + 1, r, target);
  }
};

先说这么多吧,后续再补充

上次更新: 10/8/2018, 2:10:19 PM