JS 乐园: 类型转换\ 运算符

76 阅读2分钟

++: 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

==!=

  • 这两类会采用 强制类型转换
  • undefinednull 相等, 返回true
  • 当两者都为Object, 则比较他们是不是同一个对象, 调用他们的valueOf(), 如果一样则为true
  • NaNNaN 不想等, 因为按照定义,每一个 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

数据类型的相互转换