码迷,mamicode.com
首页 > Web开发 > 详细

js ==和+

时间:2018-03-05 12:51:55      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:方法   返回   比较   false   直接   string   统一   null   nbsp   

==运算符

==比较符的如果两端数据类型不一致时会先进行隐式转换,然后再比较值是否相等,转换规则如下:

1.string与number比较时,先将string转成number,然后比较大小

2=="2"  //true

2.布尔类型与其它类型比较时,先将布尔类型转成数值,然后再比较

false=="2" //false

第一步:0=="2";

第二步:0==2(字符串和其它类型比较时先将字符串转成数字类型)

3.string、number和object类型比较时,先把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。 

[] == 0//true

第一步:左侧是一个数组,调用valueOf后得到的类型还是数组,数组不是基础类型,然后调用toString()方法,得到一个空字符串"",表达式变为""==0

第二步: 字符串跟数字比较时,把字符串转换为数字,表达式变为0==0

注:ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。

各类型调用valueOf或toString后的结果请点击

 +运算符

A+B时会执行以下过程:

第一步:A和B分别转换成原始值,记为A1和B1

第二步:如果A1或B1中有一个是字符串,如果A1和B1中有一个值为string,则将A1、B1都转换为string(执行ToString),其值记为A2、B2,将A2 B2连接后就是A+B的结果

第三步:如果不满足条件2,则将A1和B1都转换为number(执行ToNumber),其值记为A3、B3,将A3 B3相加即为A+B的结果

原始值转为Number的过程如下,方了方便叙述,原始值统一用obj代替:

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

了解了上述的转换机制后,下面的例子就很简单了

true + 1 // 1,布尔型转化为了数字
[] + 1   // ‘1‘,空数组转化为了字符串
{} + 1   // 1,空对象转化为了数字
var now = new Date()
typeof (now + 1) // ‘string‘,日期对象转化为了字符串

 

js ==和+

标签:方法   返回   比较   false   直接   string   统一   null   nbsp   

原文地址:https://www.cnblogs.com/94pm/p/8504473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!