标签:class 四则运算 算法 运算符 第一行代码 ber image 快速 unicode
首先我们要知道,在 JS 中类型转换只有三种情况,分别是:
我们先来看一个类型转换表格
在条件判断时,除了 undefined
, null
, false
, NaN
, ‘‘
, 0
, -0
,其他所有值都转为 true
,包括所有对象。
对象在转换类型的时候,会调用内置的 [[ToPrimitive]]
函数,对于该函数来说,算法逻辑一般来说如下:
x.valueOf()
,如果转换为基础类型,就返回转换的值x.toString()
,如果转换为基础类型,就返回转换的值当然你也可以重写 Symbol.toPrimitive
,该方法在转原始类型时调用优先级最高。
let a = { valueOf() { return 0 }, toString() { return ‘1‘ }, [Symbol.toPrimitive]() { return 2 } } 1 + a // => 3
加法运算符不同于其他几个运算符,它有以下几个特点:
1 + ‘1‘ // ‘11‘ true + true // 2 4 + [1,2,3] // "41,2,3"
1
转换为字符串,得到结果 ‘11‘
true
转为数字 1
toString
转为字符串 1,2,3
,得到结果 41,2,3
另外对于加法还需要注意这个表达式 ‘a‘ + + ‘b‘
‘a‘ + + ‘b‘ // -> "aNaN"
因为 + ‘b‘
等于 NaN
,所以结果为 "aNaN"
,你可能也会在一些代码中看到过 + ‘1‘
的形式来快速获取 number
类型, + ‘ ‘ => 0 。
那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字
4 * ‘3‘ // 12 4 * [] // 0 4 * [1, 2] // NaN
toPrimitive
转换对象unicode
字符索引来比较let a = { valueOf() { return 0 }, toString() { return ‘1‘ } } a > -1 // true
在以上代码中,因为 a
是对象,所以会通过 valueOf
转换为原始类型再比较值。
标签:class 四则运算 算法 运算符 第一行代码 ber image 快速 unicode
原文地址:https://www.cnblogs.com/gwf93/p/10295234.html