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 NotNull
- 替换和查找尽量多的使用
RegExp
,正则是C的API x++
is better thanx = x +1
- 把数字转换成字符串性能上
("" +) > String() > .toString() > new String()
- 尽量多的使用js的内部对象,比如浮点数转换成整型
Math.round
is better thanparseInt
,后者是把字符串转化为数字 - 大的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);
}
};
先说这么多吧,后续再补充