js 中的隐士转换 + ==规则

ToString

1、数组中的nullundefined,会被当做空字符串处理

2、普通对象:转为字符串相当于直接使用Object.prototype.toString(),返回"[object Object]"

ToNumber

1、null: 转为0

2、数组/对象:数组首先会被转为原始类型,然后在根据转换后的原始类型按照对应规则处理

ToBoolean

1、js中的假值只有falsenullundefined空字符0NaN,其它值转为布尔型都为true

ToPrimitive

指对象类型类型(如:对象、数组)转换为原始类型的操作

  • 当对象类型需要被转为原始类型时,它会先查找对象的valueOf方法,如果valueOf方法返回原始类型的值,则ToPrimitive的结果就是这个值
  • 如果valueOf不存在或者valueOf方法返回的不是原始类型的值,就会尝试调用对象的toString方法,也就是会遵循对象的ToString规则,然后使用toString的返回值作为ToPrimitive的结果。
  • 如果valueOftoString都没有返回原始类型的值,则会抛出异常

布尔类型和其他类型的相等比较

只要布尔类型参与比较,该布尔类型的值首先会被转换为数字类型

根据布尔类型ToNumber规则,true转为1false转为0

null、undefined和其他类型的比较

ECMAScript规范中规定nullundefined之间互相相等(==),并且也与其自身相等,但和其他所有的值都不相等(==)

总结1:+号操作的隐士转换规则

1、如果某个操作数是字符串或者能够转换为字符串的话, + 将进行拼接操作。可见在 + 操作中字符串的拼接「优先级」高于数字的 +。

2、数组或者对象在调用valueOf()方法如果无法获取到基本类型值(数字),会转而调用toString()

总结2:==号操作的隐士转换规则

  • 字符串和数字之间的相等比较:
  1. 如果Type(x)是数字,Type(y)是字符串,则返回 x == ToNumber(y)的结果。
  2. 如果Type(x)是字符串,Type(y)是数字,则返回ToNumber(x) == y的结果。
  • 其他类型值和布尔类型之间的相等比较:
  1. 如果Type(x)是布尔类型,这返回ToNumber(x) == y的结果
  2. 如果Type(y)是布尔类型,则返回x == ToNumber(y) 的结果
  • null和undefined之间的相等比较
  1. 如果x为null,y为undefined,则结果为true
  2. 如果x为undefined,y为null,则结果为true
  • 对象和非对象之间的相等比较:
  1. 如果Type(x)是字符串或者数字,Type(y)是对象,则返回x == ToPrimitive(y)的结果
  2. 如果Type(x)是对象,Type(y)是字符串或者数字,则返回toPrimitive(x) == y的结果

== 相等操作中,如果两边的操作数不同的话,都会进行类型转换,而且优先转为数字,再进行比较,如果转换后还不同则再次转换,直到相同为止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值