重学js之类型转换-----== 运算符隐式转换 及 A+B 经历过程

var a = [0]; 

if (a) { console.log(a == true);  else { console.log("wut"); }

//答案:false       额,这里有点坑

==在比较的时候可以转换数据类型,若等式两边数据类型不相同,将会往数值类型方向转换后再进行比较

有以下规则:

1、x、y为Number和String类型时,则转换为Number类型比较。

2、有Boolean类型时,Boolean转化为Number类型比较。

3、一个Object类型,一个String或Number类型,将Object类型进行原始转换后,按上面流程进行原始值比较。

注意:==等好两边都为对象时,比较的是地址

 

 

所以下面就能够解释了

 

[0]==true    ---false

[1]==true    ----true

分析:数组[0]调用toNumber方法结果为0;再与布尔值比较,当有布尔类型时转化为数

JS中进行 A+B 这种操作时会经历怎样一个过程

下面是三个很有意思的示例

function fn() { return 20; } console.log(fn + 10); // 输出结果是多少

function fn() { return 20; } fn.toString = function() { return 10; } console.log(fn +10); // 输出结果是多少?

function fn() { return 20; } fn.toString = function() { return 10; } fn.valueOf =function() { return 5; } console.log(fn + 10); // 输出结果是多少?


分析结论:JS中进行 A+B 

1.将A和B都转换为原始值(primitive,执行ToPrimitive),这里记为A1,B1

2.如果A1和B1中有一个值为string,则将A1、B1都转换为string(执行ToString),其值记为A2、B2,将A2 B2连接后就是A+B的结果

3.否则的话将A1、B1都转换为number(执行ToNumber),其值记为A3、B3,将A3 B3相加即为A+B的结果

ToPrimitive执行过程:

  1. 如果obj为原始值,直接返回;
  2. 否则调用 obj.valueOf(),如果执行结果是原始值,返回之;
  3. 否则调用obj.toString(),如果执行结果是原始值,返回之;
  4. 否则抛异常。

注意:如果preferredType为String,将上面的第2步和第3步调换(obj为Date的实例时preferredType会被设置为String,其他情况下preferredType都会被设置为Number)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值