js隐式转换

1.加号
  当加号运算符时,String和其他类型时,其他类型都会转为 String;除此之外其他情况,都转化为Number类型 , 注: undefined 转化为Number是 为’NaN‘, 任何Number与NaN相加都为NaN。如果String类型的带有数字字符的比如: ‘1a’ ,‘a1’ ,number也会转化为 NaN。

var a="hello"; b="world";
console.log(a+b) //"hellow world"
var a=false; var b=true;
console.log(a+b,a+a,b+b) //1 0 2
var a=null;
console.log(a+a); //0
var a=undefined;
console.log(a+a); //NaN

2.减号
  .数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。

10 - '20'    //-10

10 - 'one'   //NaN

10 - '100a'  //NaN

3.乘,除,大于,小于跟减的转换也是一样。

10*'20'      //200

'10'*'20'    //200

20/'10'      //2

'20'/'10'    //2

'20'/'one'  //NaN

4.==
 1)undefined等于null
 2).字符串和数字比较时,字符串转数字

'1' == 1 // true

3).数字和布尔比较时,布尔转数字

true == 1 // true

4).字符串和布尔比较时,两者转数字

'1' == true; // true 

5).对象和布尔值比较
  对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字

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

7)对象和数字比较
对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。

[1] == 1;  // true  `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true

8)注意!!对象和对象比较不能转换,比较的是引用地址

var a=[1,2];
var b=[1,2];
console.log(a==b);//false

总而言之,转换关系即为:
这里写图片描述
一个有趣的题:

[] == false;
![] == false;

这两个的结果都是true,第一个是,对象 => 字符串 => 数值0 false转换为数字0,这个是true应该没问题,
第二个前边多了个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串(’’),NaN,0,null,undefined这几个外返回的都是true, 所以! []这个[] => true 取反为false,所以[] == false为true。
还有一些比较特殊的:

undefined == null //true undefined和null 比较返回true,二者和其他值比较返回false
Number(null) //0

object在转换为基本类型(原始类型)时,会经历:先调用 toPrimitive,若找不到此方法,则根据传入的hint调用toString 或 valueOf,hint为undefined时默认调valueOf。详情参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值