资讯专栏INFORMATION COLUMN

Front-end developmenter必看,超实用的javaScript隐式类型转换规则记忆

fuchenxuan / 2307人阅读

摘要:下面先看看涉及到的几个函数以及他们的转换规则,这个是需要记忆的内容类型转换需要使用到的函数对于布尔值用到的是对于数值,用到的是当然还有但是对于隐式类型转换的时候,调用的是前者。

javaScript类型转换规则

javaScript的类型转换其实一直是很多前端开发人员很迷的地方,一会儿这里要转换,一会儿那里又要转换,总之就是一个大写的迷,因为它隐式类型转换的地方实在是太多了。

但其实它还是有规律可寻的,只要记忆一些基本的转换规则并掌握这些规律,就能很好的理清楚javaScript隐式类型转换什么时候发生以及它进行怎样的转换。

下面先看看涉及到的几个函数以及他们的转换规则,这个是需要记忆的内容

类型转换需要使用到的函数

对于布尔值,用到的是Boolean()

对于数值,用到的是Number(),当然还有parseInt()、parseFloat(),但是对于隐式类型转换的时候,调用的是前者。

对于字符串,用到的是toString()、String()

Boolean()

对于不同的数据类型,转换规则不一样

Boolean类型: true -> true, false -> false

String类型: 任何非空字符 -> true, 空字符 -> false

Number类型: 任何非零数字(包括无穷大) -> true, 0和NaN -> false

Object类型: 任何对象啊 -> true, null(特殊的对象,实质是是Object的派生) -> false

Udefined类型: 始终为转换为false

Number()

Boolean类型: true -> 1, false -> 0

Number类型: 只是简单的传入和传出

null: 返回0

Udefined类型: 返回NaN

字符串类型:

若字符串中只包含数字(包含正负号),则将其转换为十进制数,注意011 -> 11会忽略前面的0

如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样也会忽略前导零)

如果字符串包含有效的十六进制格式,例如oxf,则将其转换为相同大小的十进制整数

如果字符串是空的,转换为0

如果字符串包含上述格式之外的字符,则将其转换为NaN

对象:先调用对象的valueOf()方法,然后依照前面列举的规则转换返回的值,如果转换的结果是NaN,再调用对象的toString()方法,也依照前面的规则转换返回的字符串值

toString()、String()

除了null、undefined,其他数据类型都含有toString()这个方法,直接调用即可,null、undefined可用String()来转换

以上规则来源于javaScript高级程序设计第三版
那什么时候进行隐式类型转换呢? 规则

只要你的数据类型和你使用的操作符所适用的数据类型不同时(除了相等操作符==、!=),就会调用前面提到的相应的类型转换方法来进行转换。
如果被转换类型是Object,那么会先调用自身的valueOf(),根据情况决定是否继续调用toString(),并将得到的值传入类型转换方法中。
如果是二元加性操作符(+),如果有一个值为字符串,那么结果始终为字符串。
如果是关系运算符<、<=、>、>=,对于两边都是字符串的情况,会比较两个字符串对应的字符编码,而不是将其转换为number

数值类型操作符

一元操作符++、--,一元加减操作符+、-,位操作符~、&、|、^、<<、>>、>>>,乘性操作符*、/、%,加性操作符加法+、减法-,关系操作符<、>、<=、>=,它们都是对Number类型的值进行操作,如果发现类型不对,就会调用Number()来转换。

布尔操作符

对于操作布尔类型的操作符如!、&&、||,如果任意一边不是布尔值,则会调用Boolean()来转换。

相等操作符==、!=

对于相等操作符,它的类型转换就比较复杂了,我们上面的规则也不适用于它,这里还是列出来。
这个表展示的是对于不同类型的组合,是怎么转换的,并且将最终转换的结果使用全等===来比较。

结语

javaScript高级程序设计上说的很分散而且也很多,没有统一说明,让人很晕,上面是我总结出来的,中间有一个小地方我没指明,因为还没确认,因为个人觉得这是一个错误,该错误已上报给出版社,若确认是一个错误,那么我将不会在这里指出,否者我将把这个小知识点添加到本文结语后面部分。上面的数据类型转换概括的很全面,也很容易理解,希望对你有帮助。

总结来自javaScript高级程序设计第三版

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98144.html

相关文章

  • 掌握 Javascript 类型转换隐式转换救救孩子

    摘要:看下面的代码和会对操作数执行条件判断,如果操作数不是布尔值,会先执行类型转换后再执行条件判断。大家记住这个规则布尔值如果与其他类型进行抽象比较,会先用将布尔值转换为数字再比较。 在上一篇中我们聊过了 JS 类型转换的规则和我发现的一些常见书籍中关于类型转换的一些小错误,当碰到显示类型转换的时候大家可以按照这些规则去拆解出答案。但 JS 中存在一些很隐晦的隐式类型转换,这一篇就来谈下我对...

    weapon 评论0 收藏0
  • 深入js隐式类型转换

    摘要:结合实际中的情况来看,有意或无意中涉及到隐式类型转换的情况还是很多的。此外当进行某些操作时,变量可以进行类型转换,我们主动进行的就是显式类型转换,另一种就是隐式类型转换了。 前言 相信刚开始了解js的时候,都会遇到 2 ==2,但 1+2 == 1+2为false的情况。这时候应该会是一脸懵逼的状态,不得不感慨js弱类型的灵活让人发指,隐式类型转换就是这么猝不及防。结合实际中的情况来看...

    tomato 评论0 收藏0
  • Python工程师必看面试问题与解答(中)

    摘要:在中什么是迭代器在中,迭代器用于迭代一组元素,如列表之类的容器。中的生成器是什么实现迭代器的方法称为生成器。如何将数字转换为字符串要将数字转换为字符串,请使用内置函数。如果需要八进制或十六进制表示,请使用内置函数或。 showImg(https://segmentfault.com/img/bVbfztO?w=1024&h=1024);16)在Python中什么是迭代器? 在Pytho...

    xiao7cn 评论0 收藏0
  • 阿里云学生服务器操作攻略(详细全套完整图文教程!菜鸟必看!)

    摘要:第一步如何以最低价格快速买到阿里云服务器如果我是学生,我如何通过买到价值的服务答用购买云服务器是阿里云学生专属活动。除阿里云外,大多数云服务器公司例如西部等同配置云服务器的价格都在左右。例如云服务器地址等。第一步:如何以最低价格快速买到阿里云服务器?1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务?答:用¥9.9购买云服务器ECS是阿里云学生专属活动。首先,你需要在阿里云官网注...

    FuisonDesign 评论0 收藏0
  • 阿里云ECS建网站(建站)详细全套完整图文教程!菜鸟必看

    摘要:首先,你需要在阿里云官网注册账号。然后在阿里云官网首页点击校园扶持,经学生认证后便可购买每月的特价云服务器。图幕布拍照如果对备案还有疑问,请参考阿里云官方文档首次备案图文引导。具体操作方式请看阿里云官方介绍镜像部署或一键安装包部署。第一步:如何以最低价格快速买到阿里云服务器?1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务? 答:用¥9.9购买云服务器ECS是阿里云学生专属活动...

    Baoyuan 评论0 收藏0

发表评论

0条评论

fuchenxuan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<