js类型隐式转换

得到一个变量的真实数据类型,能够经过 Object.prototype.toString.call(xx)。这样咱们就能够得到相似 [object Type] 的字符串bash

对象在转换基本类型时,首先会调用 valueOf 而后调用 toString。而且这两个方法你是能够重写的.ui

let a = {
    valueOf() {
    	return 0
    }
}
复制代码

固然,你也能够重写Symbol.toPrimitive ,该方法在转基本类型时调用优先级最高。spa

let a = {
  valueOf() {
    return 0;
  },
  toString() {
    return '1';
  },
  [Symbol.toPrimitive]() {
    return 2;
  }
}
1 + a // => 3
'1' + a // => '12'
复制代码

只有当加法运算时,其中一方是字符串类型,就会把另外一个也转为字符串类型。其余运算只要其中一方是数字,那么另外一方就转为数字。而且加法运算会触发三种类型转换:将值转换为原始值,转换为数字,转换为字符串。prototype

1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'
复制代码

对于加号须要注意这个表达式 'a' + + 'b'code

'a' + + 'b' // -> "aNaN"
// 由于 + 'b' -> NaN
// 你也许在一些代码中看到过 + '1' -> 1
复制代码
相关文章
相关标签/搜索