前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重学Javascript之类型转换

重学Javascript之类型转换

原创
作者头像
行百里者半九十
修改2020-07-27 10:36:23
3980
修改2020-07-27 10:36:23
举报
文章被收录于专栏:Javascript学习

强制类型转换(显示类型转换)

  • Number()
image.png
image.png
  • Boolean()
image.png
image.png
  • String()
image.png
image.png
image
image

调用数组、函数、对象和正则表达式的valueOf() 会返回对象本身。日期类定义的valueOf()方法会返回它的一个内部表示:1970年1月1日以来的毫秒数。

image
image
image
image

自动类型转换

加号(+) 运算符

代码语言:txt
复制
- 作为一元运算符:  常用于将操作数转换为数值
- 作为二元运算符
    - 如果其中一个为对象,则会将对象转换为原始类型。日期对象通过调用toString()执行转换,其他的通过valueOf()(**如果valueOf()返回一个原始类型的值得话**)。由于多数对象不具备可用的valueOf()方法,因此他们会通过toString()来进行转换。
    - 对象转换成原始类型的值后,如果其中一个为字符串的话,另一个操作数也要转换成字符串,然后进行字符串的拼接。
    - 否则,两个数都转换为数字(或者NaN),然后进行加法操作。

两个例题

有一个很有意思的一个,不能以上面的规则理解: {} + {}  :  NaN (其实在Chrome控制台,输出的为:"object Object") {}  + []  : 0

这是因为,浏览器会把第一个{} 作为一个空的代码块解析,因此上面的两个分别就等价于: + {} ,  + [] 因此,得到上面相应的结果。

这里添加一个这两个的转换过程: 上面说了,分别等价于 + {} 和 + [] 。因此,+作为一元运算符,要把其后面的{} 和 []转换为整数。这个转换相当于Number({}) 和Number([])。在最开始我们就介绍了通过Number()进行转换的原则:

  • 先调用valueOf()方法。对于对象来说,valueOf()方法返回的是其本身。
    image.png
    image.png
  • 既然上面的返回的不是基本类型,再调用toString()方法。分别返回 ”object Object“ 和 ”“。这是属于基本类型的(String)。因此对他们分别调用Number(),转换后的值分别为: NaN 和 0

== 运算符

  • 如果一个是null,一个是undefined,则返回true
  • 如果一个是数字,一个是字符串,则将字符串转换为数字,然后再进行比较。
  • 如果一个值为布尔值,将其转换为数字
  • 如果一个数值为对象,另一个为数值或者是字符串,则先将对象通过valueOf()或toString()转换为原 始类型,然后再比较。(JS核心的内置类会首先尝试valueOf(),再尝试使用toString().除了日期类,日期类只使用toString()转换。
  • 不满足上面的,均为false

这里要注意: 在 + 或 ==进行的隐式转换中,对象(除了日期类型)都是先尝试使用valueOf()进行转换,然后再尝试使用toString()。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 强制类型转换(显示类型转换)
  • 调用数组、函数、对象和正则表达式的valueOf() 会返回对象本身。日期类定义的valueOf()方法会返回它的一个内部表示:1970年1月1日以来的毫秒数。
  • 自动类型转换
    • 加号(+) 运算符
      • 两个例题
        • == 运算符
          • 这里要注意: 在 + 或 ==进行的隐式转换中,对象(除了日期类型)都是先尝试使用valueOf()进行转换,然后再尝试使用toString()。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档