9,343
社区成员
发帖
与我相关
我的任务
分享这个涉及js的隐式转换。
前面部分:1+'1',会隐式转换成字符串,'11';
后面部分:‘11’会隐式转换成整型11,然后进行计算,最终结果是:9。
涉及知识点:
1)减、乘、除
非Number类型运用数学运算符(- * /)时,会先将非Number类型转换为Number类型。
1 - true // 0, 首先把 true 转换为数字 1, 然后执行 1 - 1
1 - null // 1, 首先把 null 转换为数字 0, 然后执行 1 - 0
1 * undefined // NaN, undefined 转换为数字是 NaN
2 * ['5'] // 10, ['5']首先会变成 '5', 然后再变成数字 5
上面例子中的 ['5']的转换,涉及到拆箱操作,将来有机会再出一篇文章说明。
2)加法的特殊性
为什么加法要区别对待?
因为JS里“+”还可以用来拼接字符串。
谨记以下3条:
当一侧为String类型,被识别为字符串拼接,并会优先将另一侧转换为字符串类型。
当一侧为Number类型,另一侧为原始类型,则将原始类型转换为Number类型。
当一侧为Number类型,另一侧为引用类型,将引用类型和Number类型转换成字符串后拼接。
具体可以跳转阅读: https://chinese.freecodecamp.org/news/javascript-implicit-type-conversion/
先是 1 跟 '1' 进行字符串拼接 变成 '11'
然后'11'再跟9进行运算,运算的时候发生隐式转换,将 string 类型的'11'转换成 number 类型的 11
结果是 9
前面是转成了字符串
后面在计算时转换为整型
9?
