你不知道的JavaScript 观后收获
2020-12-30
今天的收获
奇特的~运算符
- 解释一下
~42 //相当于 -(42+1)==>-43 - 适用场景
var a = 'hello world';
if (~a.indexOf('lo')) {
console.log(true,~a.indexOf('lo'))
}
~~-78.9==> -78 //最大支持到32位
三元运算符?:判断a是否为真
var b=a?true:false //建议写为 var b=Boolean(a)?true:false
把关运算符&&
function foo(){
console.log(a)
}
if(a){
foo()
} //简写 a&&foo()
2020-1-6
强制类型转换部分
-
在比较的时候可能会默认调用 valueof toString 方法进行默认转换
-
我们要对==两边的值认真推敲,以下两个原则可以让我们有效地避免出错。
-
如果两边的值中有true或者false,千万不要使用==。
-
如果两边的值中有[]、""或者0,尽量不要使用==。这时最好用
===
来避免不经意的强制类型转换。这两个原则可以让我们避开几乎所有强制类型转换的坑
-
地狱回调部分
-
地狱回调造成的结果是无法被维护,更新
-
地狱回调的代码就好像一条铁链,一环扣着一环,如果其中一环断掉(出现问题),就会出现一着不慎,全盘皆输的现象,代码逻辑都是固定死的,很难将其中一环打开重新修改;
-
信任问题:无法保证回调函数100%会被调用,即使写了大量逻辑代码来确保代码可以被执行,但是仍然会造成代码堆积的现象,最终导致代码很难更新和维护
2020-2-2
关于箭头的理解
箭头函数中没有自己的this值,箭头函数中所使用的this来自函数作用域链, 其遵循普通变量的规则,在函数作用域中一层一层向上找;也就是说箭头函数中的this取决于外部函数(摘抄于你不知道的JavaScript)