
1. 类型强制转换
string强制转换为数值类型(不包含函数)
// javascript code-model
// 乘号强制
'32' * 1 // 32
'ds' * 1 // NaN
NULL * 1 // 0
undefined * 1 // NaN
1 * { valueOf: () => '3' } // 3
// 加号强制
+ '123' // 123
+ 'ds' // NaN
+ '' // 0
+ null // NaN
+ undefined // NaN
+ { valueOf: () => '3' } // 3
使用Boolean过滤数组中所有假值
// javascript code-model
const compact = arr => arr.filter(Boolean);
compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN, 's', 34]);
// [1, 2, 3, "a", "s", 34]
双位运算符 ~~
// javascript code-model
Math.floor(4.9) === 4 // true
// 简写为:
~~4.9 === 4 // true
// 注意负数:
Math.floor(4.9) // 4
~~4.5 // 4
~~-4.5 // -4
Math.floor(-4.5) // -5
取整 | 0
// javascript code-model
1.3 | 0 // 1
-1.9 | 0 // -1
奇偶判断 & 1
// javascript code-model
const num = 3;
!!(num & 1); // true
!!(num % 1); // true
2. 函数技巧
强制传参
// javascript code-model
const mandatory = () => {
throw new Error('Missing parameter!');
}
let foo = (bar = mandatory()) => {
// 如果不传bar 则会执行 mandatory 内容,也就是报错
}
惰性载入函数
// javascript code-model
//正常书写
function fool (a, b) {
if (a !== b) {
console.log('aaa');
} else {
console.log('bbb');
}
}
// 惰性函数
function fool (a, b) {
if (a !== b) {
fool = function () {
console.log('aaa');
}
} else {
fool = function () {
console.log('bbb');
}
}
}
惰性函数第一次运行后就会覆写这个方法,下次运行是就不会进行判断了。当然目前只有一个判断,如果判断很多,分支比较复杂,那么节约的资源还是非常可观的。