第67天 举例子说说你对js隐式类型转换的理解
Activity
rocky-191 commentedon Jun 22, 2019
js中双等号比较的时候也会产生隐式类型转换,所以才推荐采用三个等号进行比较是否相等。另外比如
let a=1;b=''+a;
b就会变成字符串的1,这种隐式类型转换。yxkhaha commentedon Jun 22, 2019
console.log(1 + true); // 2
liangchaofei commentedon Jun 24, 2019
这个应该是11,不是2
forever-z-133 commentedon Jun 28, 2019
forever-z-133/blogs#13
其实这里面的坑实在是有点多,比如等于判断,大小判断,入参类型转换,运算时类型转换等等。
等于判断
等于判断时,是会去先转为相同数据类型,再判断的。
Array -> String -> Number -> Boolean 有顺序的。
大小判断
也是要先转为相同数据类型再比较的,但有很多令人费解的地方。
特别是两个字符串的大小比较,至今不懂其中规律,虽然不会这样去玩。
所以这会造成下面这种结果:
再者,undefined、null 和 NaN 一直都很特别。
入参类型转换
比如 Number 和 Math 相关的方法,都会进行数字化转化等。
没仔细整理过,就不多逼逼了。
运算时类型转换
monxiaolee commentedon Jun 29, 2019
https://justjavac.com/javascript/2013/04/08/javascript-quirk-1-implicit-conversion-of-values.html
damofan commentedon Sep 7, 2019
js在做运算时,如果两边数据不一样,编译器会自动做一个数据转换再进行比较
转换规则
2.关系运算符(>,<,>=,<=,==,===,!==)、算术运算符号(+,-,*,/,%,++,--),转换为Number
3.逻辑非运算符(!),转换为Boolean
特殊点:
1.数组、对象等复杂数据类型在隐式转换时会先使用valueOf()获取其原始值,如果原始值不是Number则调用toString()转成Sting,再转成Number
2.Boolean转换在以下几种情况下为false:
0,-0,NaN,undefined,"",null,[],false
3.undefined与null的特殊情况
undefined == undefined // true
undefined == null // true
null == null // true
4.NaN与任何数据比较都是false,包括自己 // 六亲不认的步伐
smile-2008 commentedon Jan 7, 2021
jamsehua commentedon Jan 12, 2021
应该是 console.log(1+ +'1')