大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
在什么条件下会触发隐式转换机制?
在进行比较运算,或者进行四则运算时,常常会触发JS中的隐式转换机制。
首先要记住JS设计者的初衷是美好的,他希望 == 是美好的操作选择,但是在美好的希望也是希望。
小案例
- 为什么 [] == false ?
类型不同比较时,需要先做类型转换,==比较时有布尔值参与时,需要比较双方均转为数字,[ ]是非原值,需要转换为原值二者才能进行比较,大部分对象转换为原值最后都是调用的toString方法,[] –> toString() —> ‘’,当字符串和数字比较时,会把字符串转换为数字,而空字符串转换为数字结果是0,而 0 == 0,所以结果为true
- 为什么NaN !== NaN?
这是隐式转换的一个很大的弊端,es6的includes方法可以检测出NaN等于NaN,这是一大进步
- null == 0 结果为false
这时候两边的类型也不同,但是却没有做类型转换,why?因为这时候二者都已经是基本数据类型了,没有办法在进行转换了,所以二者的类型都不可能相同,结果自然为false
- 为什么null == undefined 结果为true
这是一种规定
if x is null and y is undefined, return true
if y is null and x is undefined, return true - 为什么 !![] = true
这里并没有涉及 == 比较,只需要判断 [] 是true还是false即可
注意,字符串转换为数字调用的是Number方法,NaN也是数字,某些方面来说布尔类型也属于一种int类型
隐式转换的最大弊端
NaN不等于NaN
几种为false的情况,只要不是这几组值,结果均为true
0,’’,NaN,false,null,undefined
涉及隐式转换最多的两个运算符
+ ,==
三种隐式转换
1、将值转为原始值
2、将值转为数字
3、将值转为字符串
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183231.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...