js中隐式转换====>js中引用类型和值类型复制的区别,栈和堆

目录

1.1 隐式转换介绍

1.2 隐式转换规则

1.3 坑一:字符串连接符与算术运算符隐式转换规则混淆

1.4 坑二:关系运算符:会把其他数据类型转换成number之后再比较关系

1.5 坑三:复杂数据类型在隐式转换时会先转成String,然后再转成Number运算

1.6-坑四:逻辑非隐式转换与关系运算符隐式转换搞混淆

1.1-隐式转换介绍

在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算,这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换

1.2-隐式转换规则

  1. 对象和布尔值比较
    对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
    [] == true; //false []转换为字符串’’,然后转换为数字0,true转换为数字1,所以为false

  2. 对象和字符串比较
    对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。
    [1,2,3] == ‘1,2,3’ // true [1,2,3]转化为’1,2,3’,然后和’1,2,3’, so结果为true;

  3. 对象和数字比较
    对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。
    [1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => ‘1’ => 1 所以结果为true

  4. 字符串和数字比较
    字符串和数字进行比较时,字符串转换成数字,二者再比较。
    ‘1’ == 1 // true

  5. 字符串和布尔值比较
    字符串和布尔值进行比较时,二者全部转换成数值再比较。
    ‘1’ == true; // true

  6. 布尔值和数字比较
    布尔值和数字进行比较时,布尔转换为数字,二者比较。
    true == 1 // true

在这里插入图片描述
任意两种类型比较时,如果不是同一个类型比较的话,则按如图方式进行相应类型转换。
对象 => 字符串 => 数值
布尔值 => 数值。

特别注意:
1.空字符串(’’),NaN,0,null,undefined这几个外返回的都是true
2.undefined == null //true undefined和null 比较返回true,二者和其他值比较返回false
3.Number(null) //0

1.3-坑一:字符串连接符与算术运算符隐式转换规则混淆

· 常见面试题如下

在这里插入图片描述

· 原理分析
在这里插入图片描述

1.4-坑二:关系运算符:会把其他数据类型转换成number之后再比较关系

常见面试题如下
在这里插入图片描述

· 原理分析
在这里插入图片描述

1.5-坑三:复杂数据类型在隐式转换时会先转成String,然后再转成Number运算

· 原理分析
在这里插入图片描述

· 原理分析
在这里插入图片描述

1.6-坑四:逻辑非隐式转换 与 关系运算符隐式转换 搞混淆

· 前方高能,请注意~
o 空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串[object Object] (注意第一个小写o,第二个大写O哟)

· 常见面试题
在这里插入图片描述
· 原理分析

在这里插入图片描述


作者:传智播客官方博客
来源:CSDN
原文:https://blog.csdn.net/itcast_cn/article/details/82887895
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值