易忘知识点1:
隐式转换:
再不同类型的数据进行计算时,会进行数据类型的隐式转换。(类型转换需要注意转换为Number(隐式转换使用Number()进行的)类型时‘ ’,false,undefined,null,空数组,转换为0。转换为Boolean类型,null,undefined,0,NAN,空字符串都为flase)
1)在使用”+“的时候,出现字符就会进行字符串链接,隐式转换为字符类型。
2)使用 "-" ”*“”/“的时候会转换为Boolean型进行数据转换,类型
3)使用==,时如果两边是其他类型先转换为Number类型在进行比较,当然如果是字符串就进行unicode码(charCodeAt)比较,常见的进行unicode进行比较的是sort()方法,如果你不给这个方法加入参数,那么在进行数字比较时他会把他们转成string类型进行比较。(注意比较时,先比较第一个字符的unicode是否相等,如果相等就进行下一个字符的比较)复杂类型进行比较时先Valueof和stringto转换为字符串类型然后再转换为number类型进行比较。
实例:
console.log([]==false);//true 转换为Number类型
console.log([1,2]>[1]);//true
console.log(![]==flase);//true 这是个坑,[]先转换为Boolean类型true(遇到!时隐式转换为Boolean类型),然后取反变为false
几种特殊的
var obj=[1,2];
var obj1={};
console.log(obj=="1,2")//true
console.log(obj.valueOf().tostring()=="[object Object]")//true
4)在遇到有返回值的方法或函数时,一定要注意隐式转换的问题。
实例:console.log(typeof (”21”)==typeof("2"));
console.log(typeof (NAN)==typeof("NAN"));
优先级:
符号优先级问题:(从高到低)
.()[]
一元运算符(++ -- typeof void...)
乘除运算符(* /)
加减运算符(+ -)
移位(>><<)
关系运算符(> <)
相等 严格相等(== === !==)
按位与(&)
按位异或(^)
按位或(|)
逻辑与(&&)
逻辑或(||)
条件(三目运算符)
赋值运算(+= *= =)
,
例:
var a=0;
a-=1?a++:++a;//首先三目运算符优先级-=运算符是最低的 那么1就变为了a++也就是0那么a=0;
console.log(a)//0