js类型转换与运算符(最核心)

类型转换与运算符的联系

类型转换分为:显示转换和隐式转换

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

使用String( ) , Number( ), Boolean( ) 或者Object( )函数进行转换

隐式转换:

(当js遇到某些运算符或者语句条件时会做隐式转换)

转换规则,如下表所示:(图来自js权威指南)

js类型转换与运算符(最核心)_第1张图片

通常我们开发处理更多的是原始值之间的转换(下面一点讲到),那对象转换为原始值,这里面的过程又是怎样的呢?

对象转换为原始值

下面代码,思考一下输出过程:

js类型转换与运算符(最核心)_第2张图片

  • 对象---》布尔值,都转换为true
  • 对象---》字符串, 主要是通过toString()
    • 返回一个反映这个对象的字符串,比如{ },返回的是“[object Object]”
  • 对象---》数字,主要是通过valueOf()
    • 更多的是简单返回的是这个对象本身内容
  • 对象的转换,主要是用toString() 和valueOf()方法的二选其一哪个优先调用或者是结合调用。
  • 像某些对象,如Date日期类,它具有toString() 和valueOf()方法,只是一般行为输出默认先使用toString()

原始类型之间的转换

算术运算符: + - * / %

( - * / %)这四个运算符,会将非数字的一方或双方进行隐式转换为数字 ,再进行运算,如果转换不成功,则显示为NaN

js类型转换与运算符(最核心)_第3张图片

+ 这个运算符:

  • +号双方操作数其中有一方为字符串,则将另一方非字符串操作数转换为字符串
  • +号双方操作数其中有一方为数字,另一方为布尔类型,则转换布尔类型的操作书为数字

js类型转换与运算符(最核心)_第4张图片

扩展:

js类型转换与运算符(最核心)_第5张图片

比较运算符( > < >= <=)

  • 双方都是字符串,按照Unicode编码逐位进行比较
  • 其中一方是数字,一方为字符串或布尔类型或者null,则将字符串或布尔类型或者null转化为数字,再进行比较。如果转化不成功(或转换后是)NaN的时候,均返回false,比如:‘four' 或者undefined 转化后为NaN。

js类型转换与运算符(最核心)_第6张图片

相等运算符 (== != === !==)

1. undefined和null与其他操作数做相等判断时不进行类型转换(特指==或!=)

2. 对象在做==比较时等同于===

3. ==如果有一个操作数时布尔值,则再比较==之前先将其转换为数值

  • === 不会做类型转换
  • == 某些情况下会做类型转换

js类型转换与运算符(最核心)_第7张图片

扩展:

js类型转换与运算符(最核心)_第8张图片

从此我们发现

1. 比如 if 语句中的条件,在没有限定相等操作符时,会自动使用Boolean()得出true或false.

2. 而使用({ })==true 或者([ ])==true 可能会导致意想不到的错误,这两个会先调用valueOf( )后再进行比较。({ })调用valueOf()得到{ },或者说转换位数字不成功,([])调用valueOf()得到[ ],或者说转换数值成功为0,所以==false.

3. == 和Boolean()不能混淆使用

总结:

使用显示方式类型转换可能更能达到我们的预期,而隐式转换则更为灵活简便,在这些运算符中,每种运算符都会有各自的偏好,所以使用的时候需要更加留意。

以上为个人学习研究心得,如有不正确或者有别的见解的地方,欢迎下方留言评论交流分享

本人及工作室承接  软件开发、技术咨询、代写代码(大小项目)、软件模板出售、项目教学、毕业实践项目

个人微信:laoliukaifa                  工作室网站:www.globalbuy123.com   

js类型转换与运算符(最核心)_第9张图片

你可能感兴趣的:(node.js,vue.js,angular.js,前端,javascript)