==与===的区别 与类型转换
== 是一种比较松散,会进行类型转换之后判断。 10 == "10",结果肯定是true,因为这个过程"10"会被转换为一个数字类型再与10进行判断; null == undefined "" == 0 等等 但是 "" == null 是false的 因为""是一个空字符串基本类型, null代表空对象,""空字符串是String类型,存放于栈中已经分配内存空间,内存空间里面的值是一个空字符串。null代表是一个空对象还没有分配内存空间。有空间也会存放于堆中,所以无论怎么转换也不会相等。
=== 是指严格等于,在判断时不会做任何类型转换。实际逻辑中建议使用严格等于,减少类型转换判断比较准确。
所谓类型转换 分为强制类型转换和隐式类型转换:
强制类型转换也就是使用代码强制的把一种类型的数据转换成另一种类型的数据,比如parseInt,parseFloat Number() String() Boolean() 等等
隐式类型转换也就是执行的时候解析器自己帮我们转换的
if语句内的判断 逻辑运算符 比如 10 && 0 就等于0 &&运算符两边要不是布尔型的就会将先两边转换为布尔型的值 只有都是真的返回前面的值 有一个为假就返回后面的值 || 则不一样 有真的就返回真的 都是假就返回后面的也就是判断下第一个值是真是假 为真就返回 不为真就返回后面的数 !也会进行类型转换 小技巧 判断一个值强制转换为Boolean类型时是真是假 就用!!来判断即可。
一些类型转换的小用法: 把一个数字转换为字符串类型 100+"";让数字加上一个空字符串就会隐式转换为字符串。 parseInt转换字符串时会在第一个不是数字的字符时停止将前面的字符串转换为数字,忽略后面的信息。 将数字样式的字符串转换为数字类型 例: "100" - 0 就可以完成转换
在if语句中 判断条件的值为 0 "" NaN false 为假