针对这道题目 '10' + 3 - '1'
相当于原始类型的隐式转换,number
和 string
类型数据 +
运算,默认 number
转换为 string
类型,而 string
和 number
类型数据 -
运算,默认 string
转换为 number
类型。
// '10' + 3 相当于 '10' + Number(3).toString() => '103' // '103' - '1' => '103'.valueOf() - '1'.valueOf() => 103 - 1 => 102 var foo = '10' + 3 - '1'; console.log(typeof foo) // number console.log(foo); // 102
从左往右:"10"+3:+的一边是字符串,会将3转换成'3'进行字符串拼接,结果是'103';
'103'-'1'因为-只能用作算术运算符,所以相当于Number('103') - Number('1') = 102
这道题发生了两次类型转换,第一次转化为string 类型,第二次转化为number 类型所以最后的结果就是Number 类型的102