欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js的类型转换那些事

程序员文章站 2022-03-02 21:09:25
...

文章开始之前 请看一个问题 [] == ![] 结果是true还是false?

js的基本数据类型

基本数据类型一共6种,分别是number,undefined,sybmol,null,string,boolean。

  • 基本类型值是指简单的数据段,基本类型是按值访问的,因为可以操作保存在变量中的实际值
  • 基本类型的值在内存中占据固定大小的空间,被保存在栈内存中。从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本。

  • 不能给基本类型的值添加属性

js的引用数据类型:object

  • 引用类型是由多个值构成的对象,js不允许直接访问内存中的位置,也就是不能直接访问操作对象的内存空间。对object的操作时 实际上是在操作对象的引用而不是实际的对象。
  • 引用类型的值是对象,保存在堆内存中,包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针。从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。

  • 对于引用类型的值,可以为其添加属性和方法,也可以改变和删除其属性和方法

类型转换

首先我们要知道,在 JS 中类型转换只有三种情况,分别是:

  • 转换为布尔值
  • 转换为数字
  • 转换为字符串

转换关系图


转Boolean

在条件判断时,除了 undefinednullfalseNaN''0-0,其他所有值都转为 true,包括所有对象。


==判断流程

对于 == 来说,如果对比双方的类型不一样的话,就会进行类型转换

假如我们需要对比 xy 是否相同,就会进行如下判断流程:

  1. 首先会判断两者类型是否相同。相同的话就是比大小了
  2. 类型不相同的话,那么就会进行类型转换
  3. 会先判断是否在对比 nullundefined,是的话就会返回 true
  4. 判断两者类型是否为 stringnumber,是的话就会将字符串转换为 number
    1 == '1'
          ↓
    1 ==  1
    复制代码
  5. 判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断
    '1' == true'1' ==  1
            ↓
     1  ==  1
    复制代码
  6. 判断其中一方是否为 object 且另一方为 stringnumber 或者 symbol,是的话就会把 object 转为原始类型再进行判断
    '1' == { name: 'din' }
            ↓
    '1' == '[object Object]'复制代码

思考结果

看完你知道 文章开始之前的问题 [] == ![] 结果是true还是false?

结果 是 true。右边![] 是布尔值 false,转成0, 左边[] 因为空数组 转为数字0;所以结果是

[] == ![]
        ↓
0 == 0   //true复制代码


转载于:https://juejin.im/post/5cd3d456f265da037129b808