js ==和+

Posted 94pm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js ==和+相关的知识,希望对你有一定的参考价值。

==运算符

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

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 ==和+的主要内容,如果未能解决你的问题,请参考以下文章

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

js代码片段: utils/lcoalStorage/cookie

JS代码片段:一个日期离现在多久了

js常用代码片段(更新中)