类型强制转换
1.1 string强制转换为数字
可以用 *1 来转换为数字
也可以用 + 来转化字符串为数字
1.2 object强制转化为string
1.3 使用boolean过滤数组中的所有假值
快速过滤js中的假值: false、null、0、""、undefined、NaN
const compact = arr => arr.filter(Boolean)
compact([ /* */ ])1.4 双位运算符 ~~
可以使用双位运算符来替代 Math.floor() 双否定位操作符的优势在于执行速度更快
Math.floor(4.9) === 4 // true
~~4.9 === 4 // true对于负数来说,结果与Math.floor() 不同
~~-4.5 // -4
Math.floor(-4.5) // -51.5 短路运算符
逻辑与&& 与 逻辑或|| 是短路运算符(就是从左到右的运算中前者满足要求,就不再执行后者)
- && 为取假运算,遇假返假,不再执行,否则返回最后一个真值
- || 为取真运算,遇真返真,不再执行,否则返回最后一个假值
| 运算符 | 示例 | 说明 |
|---|---|---|
&& | expr1 && expr2 | 如果expr1 能转换成false则返回expr1,否则返回expr2. 因此, 在Boolean环境中使用时, 两个操作结果都为true时返回true,否则返回false |
| ` | ` | |
! | !expr | 如果单个表达式能转换为true的话返回false,否则返回true |
因此可以用来给变量赋初值
let variable1
let variable2 = variable1 || 'foo'也可以用来进行简单判断,取代冗长的if
let variable = param && param.prop1.6 取整 | 0
对一个数字 |0 可以取整,负数也同样适用
1.7 判断奇偶数 &1
对一个数字 &1 可以判断奇偶数,负数也适用
const num = 3
!!(num & 1) // true
!!(num % 2) // true函数
2.1 函数默认值
2.2 强制参数
默认情况下,如果不向函数参数传值,那么JS 会将函数参数设置为undefined
const mustParam = () => {
throw new Error('must param')
}
const foo = (bar = mustParam()) => {
return bar
}2.3 隐式返回值
返回值是我们通常用来返回函数最终结果的关键字。只有一个语句的箭头函数,可以隐式返回结果(函数必须省略大括号{ },以便省略返回关键字)。
要返回多行语句(例如对象文本),需要使用( )而不是{ }来包裹函数体。这样可以确保代码以单个语句的形式进行求值。
2.4 惰性载入函数
在某个场景下我们的函数中有判断语句,这个判断依据在整个项目运行期间一般不会变化,所以判断分支在整个项目运行期间只会运行某个特定分支,那么就可以考虑惰性载入函数
function foo() {
if (a !== b) {
console.log('aaa')
} else {
console.log('bbb')
}
}
// 优化后
function foo() {
if (a !== b) {
foo = function() {
console.log('aaa')
}
} else {
foo = function() {
console.log('bbb')
}
}
return foo()
}那么第一次运行之后就会覆写这个方法,下一次再运行的时候就不会执行判断了。当然现在只有一个判断,如果判断很多,分支比较复杂,那么节约的资源还是可观的。
2.5 一次性函数
跟上面的惰性载入同理,可以在函数体覆写当前函数,那么可以创建一个一次性的函数,重新赋值之前的代码相当于只运行了一次,适用于运行一些只需要执行一次的初始化代码
var sca = function() {
console.log('msg')
sca = function() {
console.log('foo')
}
}
sca() // msg
sca() // foo3. 代码复用
3.1 Object[key]
虽然将 foo.bar 写成 foo ['bar'] 是一种常见的做法,但是这种做法构成了编写可重用代码的基础。许多框架使用了这种方法,比如element的表单验证。 请考虑下面这个验证函数的简化示例:
function validate(values) {
if(!values.first)
return false;
if(!values.last)
return false;
return true;
}
console.log(validate({first:'Bruce',last:'Wayne'})); // true复制代码上面的函数完美的完成验证工作。但是当有很多表单,则需要应用验证,此时会有不同的字段和规则。如果可以构建一个在运行时配置的通用验证函数,会是一个好选择。
// object validation rules
const schema = {
first: {
required:true
},
last: {
required:true
}
}
// universal validation function
const validate = (schema, values) => {
for(field in schema) {
if(schema[field].required) {
if(!values[field]) {
return false;
}
}
}
return true;
}
console.log(validate(schema, {first:'Bruce'})); // false
console.log(validate(schema, {first:'Bruce',last:'Wayne'})); // true复制代码现在有了这个验证函数,我们就可以在所有窗体中重用,而无需为每个窗体编写自定义验证函数。
