带你玩转JavaScript中的隐式强制类型转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了带你玩转JavaScript中的隐式强制类型转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1636字,纯文字阅读大概需要3分钟。
内容图文
正题开始前我想先抛出一个问题,==和===有什么区别?可能一般人会想,不就是后者除了比较值相等之外还会比较类型是否相等嘛,有什么好问的,谁不知道?!但是这样说还不够准确,两者的真正区别其实是==在比较的时候允许做强制类型转换,而===不允许。好了终于引出了今天的重点,我们平时肯定遇到过强制类型转换的时候,死活想不通为什么要这样转换(为什么这两个相等)的情况。那么下面我就以==为例,来说明一下其中强制类型转换的规则。
前提知识
JavaScript中的假值:undefined、null、false、+0、-0、NaN和" "
1.字符串和数字相等比较
25 == "25" //true
第一种情况比较简单,当字符串和数字之间相等比较的时候,都会先将字符串强制转换成数字再比较
2.其他类型和布尔类型相等比较
"25" == false//false "0" == false//true
第二种情况,当其他类型和布尔类型相等比较的时候,都会先将布尔类型强制转换为数字再比较。
右边的false强制转换为数字结果是0,然后再运用上面第一条规则,"0"强制转换为0,所以"0" == false返回的结果是true
3.对象和非对象相等比较
"abc" == Object("abc"); //truenull == Object(null); //false undefined == Object(undefined); //false NaN == Object(NaN); //false
第三种情况,如果是对象(对象、函数、数组)和非对象之间相等比较时,会进行ToPrimitive操作(转换为原始类型)。
什么是ToPrimitive操作呢,其实ToPrimitive操作就是先执行valueOf()方法,如果结果为原始值,则返回此结果;否则,执行toString()方法,如果结果是原始值,则返回此结果;否则,抛出TypeError错误。
拿上面的第一个为例,Object("abc")执行ToPrimitive操作后,返回了"abc"原始值,所以结果为true。
Object(null)和Object(undefined)执行完ToPrimitive操作后和Object()是一样的,所以结果为false。
最后一个结果为false,是因为NaN不等于NaN。
特殊情况
还有一种特殊情况,null == undefined(别问我为什么,这个是规定)
小检验
false == ""; false == []; "" == 0; "" == []; 0 == []; "" == [null];
看了之前的分析,检验一下吧,看看上面几个应该是true还是false呢?
总结
其实总结下来就三个口诀:
1.字符串类型和数字类型相等比较,字符串强转数字,再比较。
2.其他类型和布尔类型相等比较,布尔类型强转数字,再比较。
3.对象和非对象相等比较,执行ToPrimitive()操作,再比较。
有了这三个口诀(知道了转换原理),我相信任何情况我们都不再懵逼了。
写在最后
有一年没有更新博客了,回想一下,一是因为公司业务缠身,二是因为去年经历一些事情打击了我,其实这些也都是借口吧,最近看到强制类型转换这个方面有点绕,正好跟大家分享一下,希望之后能够坚持吧,多分享一些东西,对自己也是一种督促与进步吧。
最后感谢大家的阅读,有什么分析的不对的地方欢迎大家批评指出,如果喜欢本文,请点击右下角的推荐哦~
原文:http://www.cnblogs.com/WhiteBlade/p/6754772.html
内容总结
以上是互联网集市为您收集整理的带你玩转JavaScript中的隐式强制类型转换全部内容,希望文章能够帮你解决带你玩转JavaScript中的隐式强制类型转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。