遗留问题Symbol
应用:在企业开发中如果需要对一些第三方的插件,框架进行自定义的时候,可能会因为添加同名的属性或者方法,将框架中的原有属性或者方法覆盖掉,为了避免这种情况的发生,框架的作者或者我们就可以使用Symbol作为属性或者方法的名称。
var a = Symbol(1);
obj = {[a]:10};
b = Symbol(1)
obj[b] = 100;
obj
==隐式转换
当使用==进行判断时,会出现较为复杂的情况。
当使用==进行比较时,会有以下转换规则(判断规则)。
1.当两类型如果相同,值相等则相等,返回true,如2==3肯定是false的了
2.比较的双方都为基本数据类型(得,引用数据类型数组,对象,函数不是基本数据类型)
a.若一方为null,undefined,则另一方必须为null,undefined 才为true,也就是null==undefiend为true或者null==null为true,因为undefined派生于null
b.其中一方为字符串(String),是的话把字符串(String)转为数字类型(Number)再来比较。
c.其中一方是Boolean,是的话将Boolean转为Number再来比较。
d.其中一方是BigInt,是的话将BigInt转为Number再来比较。
e.其中一方是Object也就是引用类型,是的话将两方转为字符串进行比较。
f.其中双方都为Object引用类型,则判断它门是不是指向同一个对象,也就内存地址是否相同。
注意:NaN ==NaN结果是false,这个是js底层特性问题,就当个结论记住吧
可以做做这两个个易错题:
console.log('11n'==11)
console.log({}=={})
console.log([]==![])
流程控制
判断
if(){};else if(){}; else{};
switch语句
switch(val)
{
case 值:
执行的语句;
break
case 值1:
执行的语句
break
default:
执行的语句
break
}
default是默认值的意思没有任何能匹配的就会走到default这。
如果case语句后面没有break就会匹配下面的case语句,直到遇见break或者}代表结束。