++: a++ / ++a
在某些情况是不一样的
let num1 =2;
let num2 =20;
let num3 =--num1+num2; //21
let num4 = num1+ num2; //21
----------------------------
let num1 =2;
let num2 =20;
// num1-- +num2 是先进行 num1 + num2 然后 num1 再 --
let num5 = num1--+num2; // 22, 这里的num1 还是默认的2
let num6 =num1+num2 //21 //
+
+如果是 一个string, 另一个是非string的时候, 会把那个数字给转换成 string
let result = 2 + '5'; // '25'
-
-会先调用Number()方法会去将其转为数值, 一个是数字, 一个是非数字- 如果有有任意操作是对象, 则调用其
valueOf(), 如果是NaN, 则剑法计算的结果是NaN, 如果对象没有valueOf()方法, 则调用其toString(),然后在把得到的字符串转为数值
let result = 5 - '2'; // '2' 被转换为 2, 然后执行 5 - 2 = 3
let result = 5 -null // 5 , null =>0; 5-0 =5
> 与<
- 如果string 和 number去比较, 那么会先把string给 专成number 类型,在去跟另一个number去比较
console.log('23' < 3) // false, '23' => 23 , 23 < 5 = false;
- 非numbe的string, 如: a, 与 数字比较也会先把a 调用
valueOf()的到NaN, 但是NaN无论跟谁比都会返回false
let result1 = NaN < 3 //false
let reuslt2 = NaN >= 3 //false
== 与!=
- 这两类会采用 强制类型转换
undefined与null相等, 返回true- 当两者都为
Object, 则比较他们是不是同一个对象, 调用他们的valueOf(), 如果一样则为true NaN与NaN不想等, 因为按照定义,每一个NaN是不一样的, 所以不等于NaN- 当不同类型比较时,先把类型转换成同一个类型,然后再执行严格相等,比如
2 == true,结果是false,这个等同于2 === Number(true),也就是2 === 1 null代表的是对象 用typeof运算符可以检测出来null的结果为Object类型值,null只不过在隐式转换的时候被转换成0来计算而已,但是null实际代表的是一个空对象的指针,而且undefined是由null派生出来的, 所以二者==是真的, 但是===就是假的
undefined == 0 // false
null == 0 // false
null == undefined // true