js隐式类型转换

js隐式类型转换

写作意图:今天无意间看到了一个面试题,当时很惊讶,我不知道考的知识点是什么,但是知识清楚的记得,之前好像是有这么回事,然后我赶紧去把代码,写在群里问大佬,

<script>
    console.log(false==0);
    console.log([]==[]);
    console.log([]===[]);
</script>

当时我就懵逼了,这什么鬼,等于号,是赋值,false可以转换为0,第一个输出true,第二个呢,第三个呢,我的问题不是纠结于两个等于和三个等于,之前看过一个文章解释过第三个等于是严格等于,如果二都不成立的情况,那三就直接false了。先不纠结这个了,然后前端大佬就告诉我,这个考的是js隐式转换,没有多问,我赶紧去百度了,这里看到了一个大佬的文章,看起来还不错,js隐式类型转换

  • 隐式转换介绍
    在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算,这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换。
    例如:
	if(1>'0'){
        console.log(true);
    }else{
        console.log(false);
    }
    // 此代码输出结果是true

这行代码在js中并不会报错,编译器在运算符时会先把右边的"0"转成数字0`然后在比较大小

  • 隐式转换规则
  1. 转成string类型: +(字符串连接符)
  2. 转成number类型:++/–(自增自减运算符) + - * / %(算术运算符) > < >= <= == != === !=== (关系运算符)
  3. 转成boolean类型:!(逻辑非运算符)
  • 坑一:字符串连接符与算术运算符隐式转换规则混淆
    常见面试题如下:
   console.log(1+"true");
   console.log(1+true);
   console.log(1+undefined);
   console.log(1+null);

原理分析:

/*
此类问题的坑,将字符串连接符(+:只要加号两边有一边是字符串)与算术运算符(+:两边都是数字)的隐式转换搞混淆
1.字符串连接符+:会把其他数据类型调用String()方法转成字符串然后拼接
2.算术运算符+:会把其他数据类型调用Number()方法转成数字然后做加法计算
*/
//+是字符串连接符:String(1)+"true"="1true";
console.log(1+"true");
//+是算术运算符:1+Number(true)=1+1=2;
console.log(1+true);
//+号是算术运算符:1+Number(undefined)=1+NaN=NaN
console.log(1+undefined);
//+号是算术运算符:1+Number(null)=1+0=1
console.log(1+null);
  • 坑二:关系运算符:会把其他数据类型转换成number之后再比较关系
    常见面试题:
   console.log("2">10);
   console.log("2">"10");
   console.log("abc">"b");
   console.log("abc">"aad");
   console.log(NaN==NaN);
   console.log(undefined==null);

原理分析

	/*
	*当关系运算符两边有一边是字符串的时候,会将其他数据类型使用Number()进行转换,然后比较关系
	*/
   console.log("2">10);//false Number('2')>10=2>10=false
 /*
   *当关系运算符两边都是字符串的时候,此时同时转成number然后比较关系,
   * 重点:此时并不是按照Number()的形式转换成数字,而是按照字符串对应得Unicode编码来转换成数字
   * 使用这个方法可以查看字符串得unicode编码:字符串.charCodeAt(字符下标,默认为0)
   * */
   console.log("2">"10");
   
   console.log("abc">"b");
   console.log("abc">"aad");
   console.log(NaN==NaN);
   console.log(undefined==null);
  • 坑三:复杂数据类型在隐式转换时会先转成String,然后再转成Number运算
  • 坑四:逻辑非隐式转换与关系运算符隐式转换搞混淆
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值