1. 类型强制转换
1.1 使用Boolean过滤数组中的所有假值
我们知道JS中有一些假值:false, null, 0, “”, undefined, NaN,怎样把数组中的假值快速过滤呢,可以使用Boolean构造函数来进行一次转换
const compact = arr => arr.filter(Boolean)
compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN,'s', 34])// [ 1, 2, 3, 'a', 's', 34 ]
1.2 双位运算符 ~~
可以使用双位操作符来替代正数的 Math.floor(),替代负数的 Math.ceil()。双否定位操作符的优势在于它执行相同的操作运行速度更快。
Math.floor(4.9) === 4 //true
// 简写为:
~~4.9 === 4 //true
不过要注意,对正数来说 ~~ 运算结果与 Math.floor() 运算结果相同,而对于负数来说与 Math.ceil()的运算结果相同:
~~4.5 // 4
Math.floor(4.5) // 4
Math.ceil(4.5) // 5
~~-4.5 // -4
Math.floor(-4.5) // -5
Math.ceil(-4.5) // -4
1.3 取整 | 0
对一个数字 |0可以取整,负数也同样适用, num|0
1.3 | 0 // 1
-1.3 | 0 // -1
1.4 判断奇偶数 &1
对一个数字 &1可以判断奇偶数,负数也同样适用, num&1
const num=3;
!!(num & 1) // true
!!(num % 2) // true
2. 数组
2.2 统计数组中相同项的个数
很多时候,你希望统计数组中重复出现项的个数然后用一个对象表示。那么你可以使用reduce方法处理这个数组。
下面的代码将统计每一种车的数目然后把总数用一个对象表示。
var cars = ['BMW','Benz', 'Benz', 'Tesla', 'BMW', 'Toyota'];
var carsObj = cars.reduce(function (obj, name) {
obj[name] = obj[name] ? ++obj[name] : 1;
return obj;
}, {});
carsObj; // => { BMW: 2, Benz: 2, Tesla: 1, Toyota: 1 }
//之后有了在补充